You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何按分组变量计算所有列总和并排除NA值影响

问题原因

你的代码中across()的函数调用语法不符合dplyr规范,直接写sum(., na.rm = T)无法被识别为逐列应用的函数表达式,导致na.rm参数未生效,最终列内存在NA时返回NA结果。

正确写法

写法1:purrr公式风格(适合需要自定义逻辑的场景)

library(dplyr)
data <- data.frame(ID = c(1, 1, 2, 2, 3, 3, 3, 4, 4, 4),
              var1 = c(1, 2, 5, 10, NA, 5, 23, NA, NA, 1),
              var2 = c(1, NA, NA, 1, NA, 0, 1, 3, 23, 4))

result <- data %>%
  group_by(ID) %>%
  summarise(across(everything(), ~sum(., na.rm = TRUE)))

写法2:参数透传(更简洁,适合直接调用基础函数的场景)

直接把sum函数的参数传递给across的额外参数位即可:

result <- data %>%
  group_by(ID) %>%
  summarise(across(everything(), sum, na.rm = TRUE))

运行结果

上述代码执行后得到的分组求和结果如下,所有NA均已自动忽略:

# A tibble: 4 × 3
     ID  var1  var2
  <dbl> <dbl> <dbl>
1     1     3     1
2     2    15     1
3     3    28     1
4     4     1    30

注意事项

建议不要用缩写T代替TRUE,如果环境中提前定义过T = NA会导致参数失效,写全na.rm = TRUE稳定性更高。


内容的提问来源于stack exchange,提问作者user13069688

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:45:05