R-数据帧查找和is.na处理

时间:2019-07-24 19:20:28

标签: r

我在R中有以下2个数据帧

d1 <- data.frame(var1 = c(1,NA), var2 = c(NA, 2), var3 = c(3,3))
max <- data.frame(var1 = 10, var2 = 5, var3 = 5)

  > d1
  var1 var2 var3
1    1   NA    3
2   NA    2    3

  > max
  var1 var2 var3
1   10    5    5
对于d1中的每一行,我只考虑具有非NA值的列。对于这些列,我想在“ max”数据框中查找相应的值,并取这些值的总和,并将它们添加为d1中的新列。

输出应如下所示

  > d1
  var1 var2 var3 max_sum
1    1   NA    3      15
2   NA    2    3      10

我将从d1的所有行开始进行for循环,并创建我的“ max_sum”列

for (row in 1:nrow(d1)) {
    d1[row, "max_sum"] <- #code
}  

2 个答案:

答案 0 :(得分:3)

您可以使用矩阵乘法

cbind(d1,
      "max_sum" = (!is.na(d1)) %*% t(max))
#  var1 var2 var3 max_sum
#1    1   NA    3      15
#2   NA    2    3      10

答案 1 :(得分:0)

max_sum <- vector()  

for(i in 1:nrow(d1)) {

   sum <- sum(max[c(!is.na(d1[i,]))])

   max_sum[i] <- sum

}

d1$max_sum <- max_sum
d1

  var1 var2 var3 max_sum
1    1   NA    3    15
2   NA    2    3    10