r - 在 dplyr mutate 中使用 sum 函数
问题描述
我正在尝试在 dplyr 的 mutate 函数中使用 sum 函数。然而,我最终得到了意想不到的结果。下面是重现问题的代码
chk1 <- data.frame(ba_mat_x=c(1,2,3,4),ba_mat_y=c(NA,2,NA,5))
我使用下面的代码创建了另一列总结了上述两列
chk2 <- chk1 %>% dplyr::mutate(ba_mat=sum(ba_mat_x+ba_mat_y,na.rm = T))
我曾经使用过na.rm=T
,因为我NA
在 variable 中有 s ba_mat_y
。我得到的结果如下
ba_mat_x ba_mat_y ba_mat
1 1 NA 13
2 2 2 13
3 3 NA 13
4 4 5 13
然而,预期的结果是
ba_mat_x ba_mat_y ba_mat
1 1 NA 1
2 2 2 4
3 3 NA 3
4 4 5 9
解决方案
您需要 rowSums,以获取每行的列总和。
> chk1 %>% dplyr::mutate(ba_mat = rowSums(., na.rm=T))
ba_mat_x ba_mat_y ba_mat
1 1 NA 1
2 2 2 4
3 3 NA 3
4 4 5 9
您的其他公式(sum(ba_mat_x+ba_mat_y,na.rm = T))
)表示:
- 首先执行
chk1$ba_mat_x + chk1$ba_mat_y
:1 + NA, 2 + 2, 3 + NA, 4 + 5
,结果是NA, 4, NA, 9
- 然后取
sum(na.rm=T)
那个,也就是13