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

R语言按两个分类列聚合时如何保留含缺失值的所有分组组合

问题原因

R中aggregate函数使用公式(~)语法时,默认采用na.action = na.omit参数,会自动剔除分组列中包含缺失值(含空字符串、NA)的行,导致新增的Test行没有出现在聚合结果中。如果原数据集的分组列是因子类型,新增未在因子水平内的取值时,也会被自动转换为NA被剔除。

解决方法

方法1:使用非公式接口调用aggregate

显式通过by参数传入分组列,不会自动过滤分组列的任何取值:

aggregate(x = CO2[, c("Treatment", "conc", "uptake")],
          by = list(Plant = CO2$Plant, Type = CO2$Type),
          FUN = sum,
          na.rm = TRUE)

方法2:公式接口添加na.action参数

在原有公式写法的基础上,新增na.action = na.pass参数,关闭自动剔除含缺失值行的逻辑:

# 若分组列为因子类型,先转为字符型避免空值被转成NA
CO2$Type <- as.character(CO2$Type)
# 执行聚合
aggregate(. ~ Plant + Type, data = CO2, sum, na.rm = TRUE, na.action = na.pass)

两种方法执行后都会输出你期望的包含Plant为Test的13行聚合结果。

补充说明

如果需要保留两个分类列的所有理论组合(哪怕该组合没有对应原始数据),可以先通过expand.grid(Plant = unique(CO2$Plant), Type = unique(CO2$Type))生成全部分组,再和聚合结果做左连接补全即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:02