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
相关产品推荐
相关产品推荐

