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

R语言aggregate()函数如何保留含NA的分组行?

解决R语言aggregate()保留NA分组的问题

1. 创建测试数据框

FOO_BAR <- data.frame(
  Foo = c("A", "A", NA, "B", NA, "B"),
  Bar = c(1, 2, 3, 4, 5, 6),
  stringsAsFactors = FALSE
)

2. 问题重现(默认聚合丢失NA分组)

默认情况下,aggregate()会自动剔除分组项为NA的行:

# 常规聚合结果无NA分组
aggregate(Bar ~ Foo, data = FOO_BAR, FUN = sum)

输出:

Foo Bar
1   A   3
2   B  10

3. 正确解决方案

场景1:分组变量为字符型

直接指定na.action = na.pass即可保留NA分组:

aggregate(Bar ~ Foo, data = FOO_BAR, FUN = sum, na.action = na.pass)

输出(包含NA分组):

Foo Bar
1    A   3
2    B  10
3 <NA>   8

场景2:分组变量为因子型

因子默认会排除NA作为合法水平,需先将NA纳入因子水平,再执行聚合:

# 将NA加入Foo的因子水平
FOO_BAR$Foo <- factor(FOO_BAR$Foo, exclude = NULL)
# 执行聚合
aggregate(Bar ~ Foo, data = FOO_BAR, FUN = sum, na.action = na.pass)

输出同样会包含NA分组的聚合结果。

关键说明

  • na.action = na.pass的作用是跳过NA的剔除逻辑,保留所有行参与分组计算。
  • 若分组变量是因子型,必须先通过exclude = NULL把NA添加为因子水平,否则na.pass无法生效——因为因子本身不识别NA为合法分组项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:17:12