首页 > 解决方案 > 在 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

标签: rdplyr

解决方案


您需要 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

推荐阅读