如何组合2个变量并忽略NA

Joe*_*ing 2 r

我有一些像这样的数据

var1   var2
10     NA
101    NA
NA     86
11     NA
NA     11
NA     61
Run Code Online (Sandbox Code Playgroud)

如果一个变量是NA,那么另一个变量不是,反之亦然.

如何将它们组合成一个变量:

var3
10
101
86
11
11
61
Run Code Online (Sandbox Code Playgroud)

我可以通过循环轻松完成,但它很慢,所以我想找到一种更简单的方法.我想将0分配给NA的值然后只是将变量加在一起......有更好的方法吗?

Gle*_*n_b 6

存在各种方法.这是一种方式:

var3 <- ifelse(!is.na(var1),var1,var2)
Run Code Online (Sandbox Code Playgroud)

这是在你的例子:

  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
Run Code Online (Sandbox Code Playgroud)

此方法相对一般 - 它适用于非数字数据,例如:

  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"
Run Code Online (Sandbox Code Playgroud)

更换的建议,NA0和加入不会在这种情况下工作.


mne*_*nel 5

rowSumsna.rm = TRUE将做到这一点.(这是你建议的解决方案......)

假设您的数据在a data.frame DF和您的评论中

如果一个变量是NA,那么另一个变量不是,反之亦然.

是真的.

 DF$var3 <- rowSums(DF[, c('var1','var2')], na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)