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

如何调整R的aggregate函数,实现分组求和时保留非完整案例?

解决R中aggregate聚合时因缺失值排除整行的问题

你遇到的问题根源是aggregate函数默认使用na.action=na.omit参数,会先移除所有包含缺失值(NA)的整行,再执行聚合操作,最终导致求和结果不符合预期。

解决方案:调整参数让聚合忽略列级缺失值

只需修改两处设置即可实现需求:

  • 设置na.action=na.pass,保留所有含NA的行
  • 在求和函数中加入na.rm=TRUE,让sum计算时跳过NA值

具体代码如下:

v1 <- c(1, 1, 1, NA)
v2 <- c(2, 2, NA, 2)
v3 <- c("A", "B", "A", "B")

df <- data.frame(v1, v2, v3)

# 修改后的aggregate调用
aggregate(.~v3, data=df, FUN=function(x) sum(x, na.rm=TRUE), na.action=na.pass)

运行后输出:

v3 v1 v2
1  A  2  2
2  B  1  4

补充写法:指定聚合列而非公式语法

也可以不用公式形式,直接指定要聚合的列和分组变量,此时无需额外设置na.action,只需给sum添加na.rm=TRUE:

aggregate(df[, c("v1", "v2")], by=list(v3=df$v3), FUN=sum, na.rm=TRUE)

这个写法同样能得到你期望的结果。

原理说明

默认的na.omit会把第三行(v2为NA)和第四行(v1为NA)全部移除,导致分组后A组只剩第一行、B组只剩第二行。而na.pass会保留所有行,再对每组的每列单独执行带na.rm=TRUE的求和,这样就能正确计算每组中各列的非NA值总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:14