我有一些像这样的数据
var1 var2
10 NA
101 NA
NA 86
11 NA
NA 11
NA 61
如果一个变量是 NA 则另一个不是,反之亦然。
如何将它们组合成一个变量:
var3
10
101
86
11
11
61
我可以通过循环轻松完成,但速度很慢,所以我想找到一种更简单的方法。我想过将 0 分配给 NA 的值,然后将变量加在一起......有更好的方法吗?
我有一些像这样的数据
var1 var2
10 NA
101 NA
NA 86
11 NA
NA 11
NA 61
如果一个变量是 NA 则另一个不是,反之亦然。
如何将它们组合成一个变量:
var3
10
101
86
11
11
61
我可以通过循环轻松完成,但速度很慢,所以我想找到一种更简单的方法。我想过将 0 分配给 NA 的值,然后将变量加在一起......有更好的方法吗?
存在各种方法。这是一种方法:
var3 <- ifelse(!is.na(var1),var1,var2)
它正在处理您的示例:
var1 <- c(10,101,NA,11,NA,NA)
var2 <- c(NA,NA,86,NA,11,61)
var3 <- ifelse(!is.na(var1),var1,var2)
> var3
[1] 10 101 86 11 11 61
此方法相对通用 - 它适用于非数字数据,例如:
var1 <- c("AB","WZ",NA,"MN",NA,NA)
var2 <- c(NA,NA,"QT",NA,"MN","RS")
var3 <- ifelse(!is.na(var1),var1,var2)
> var3
[1] "AB" "WZ" "QT" "MN" "MN" "RS"
在这种情况下,替换和添加的建议NA
不起作用0
。
rowSums
withna.rm = TRUE
会这样做。(这真的是你建议的解决方案......)
假设您的数据在 adata.frame
DF
和您的评论中
如果一个变量是 NA 则另一个不是,反之亦然。
是真的。
DF$var3 <- rowSums(DF[, c('var1','var2')], na.rm = TRUE)