我在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
}
答案 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