2014-05-22 3 views
2

몇 가지 테스트를 마친 후 다음과 같이 도와 주시면 감사하겠습니다. 아직 올바른 결과를 얻을 수 없었습니다.문자 열을 새 열로 결합하십시오.

dd_1 <- data.frame(ID = c("1","2", "3", "4", "5"), 
       Class_a = c("a",NA, "a", NA, NA), 
       Class_b = c(NA, "b", "b", "b", "b")) 

을 그리고 나는 새 열 'CLASS'생산 싶습니다 :

나는이 데이터를 가지고

dd_2 <- data.frame(ID = c("1","2", "3", "4", "5"), 
       Class_a = c("a",NA, "a", NA, NA), 
       Class_b = c(NA, "b", "b", "b", "b"), 
       CLASS = c("a", "b", "a-b", "b", "b")) 

감사합니다 많이!

답변

2

는 여기있다 :

tmp <- paste(dd_1$Class_a, dd_1$Class_b, sep='-') 
tmp <- gsub('NA-|-NA', '', tmp) 
(dd_2 <- cbind(dd_1, tmp)) 

먼저 우리는 2 열 (문자열로 가입) 널링. pasteNA을 보통 문자열 (예 : "NA")로 처리하므로 NA-a, NA-b 또는 a-b이됩니다. 그런 다음 NA- 또는 -NA을 빈 문자열로 대체합니다.

## ID Class_a Class_b tmp 
## 1 1  a <NA> a 
## 2 2 <NA>  b b 
## 3 3  a  b a-b 
## 4 4 <NA>  b b 
## 5 5 <NA>  b b 
+0

감사 gagolews! 그것은 위대한 작품. 처음에는 'gsub'을 사용합니다. – user3262756

1

또 다른 옵션 :

dd_1$CLASS <- with(dd_1, ifelse(is.na(Class_a), as.character(Class_b), 
           ifelse(is.na(Class_b), as.character(Class_a), 
             paste(Class_a, Class_b, sep="-")))) 

것도 NA없는 경우, 클래스 중 하나가 NA 있는지 확인하고 다른 돌아가거나 것입니다 이런 식으로, 반환 결과

둘 다 "-"로 구분됩니다.

0

여기 apply 짧은 해결책 :

dd_2 <- cbind(dd_1, CLASS = apply(dd_1[2:3], 1, 
            function(x) paste(na.omit(x), collapse = "-"))) 

결과

ID Class_a Class_b CLASS 
1 1  a <NA>  a 
2 2 <NA>  b  b 
3 3  a  b a-b 
4 4 <NA>  b  b 
5 5 <NA>  b  b 
관련 문제