如果您能通过几次测试后仍然能够帮助我,我将非常感激。我仍然无法获得正确的结果。
我有这些数据:
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"))
非常感谢!
答案 0 :(得分:2)
这是:
tmp <- paste(dd_1$Class_a, dd_1$Class_b, sep='-')
tmp <- gsub('NA-|-NA', '', tmp)
(dd_2 <- cbind(dd_1, tmp))
首先,我们将2列连接起来(以字符串形式连接)。 paste
将NA
视为普通字符串,即"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
答案 1 :(得分: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,则返回两个以“ - ”分隔的类。
答案 2 :(得分: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