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

dplyr中ungroup()用法及分组统计后保留原维度实现方法

解决方案:用mutate()替代summarize()实现分组均值的重复填充

这问题我熟!你用summarize()的核心问题在于,它会把每个分组(这里是country)压缩成一行汇总结果,所以最终行数自然等于唯一国家的数量。要保留原数据集的country-year维度,你需要换用mutate()——它会在原数据的每一行上添加分组计算的结果,完全不改变原数据的行数和结构。

直接实现的代码示例

library(dplyr)
library(gapminder)

# 按country分组计算均值,新增列并保留原数据所有行
result <- gapminder %>%
  group_by(country) %>%
  mutate(country_pop_mean = mean(pop, na.rm = TRUE)) %>% # 建议加na.rm处理可能的缺失值
  ungroup()

效果说明

运行这段代码后,result的行数和原gapminder完全一致:每个country-year的行里,country_pop_mean列都会重复显示对应国家的人口均值,完美匹配你要的country-year维度需求。

备用方法:先汇总再合并

如果你已经有了用summarize()生成的均值表,也可以通过左连接合并回原数据集:

# 先生成每个国家的均值表
mean_table <- gapminder %>%
  group_by(country) %>%
  summarize(country_pop_mean = mean(pop, na.rm = TRUE)) %>%
  ungroup()

# 左连接回原数据集
result <- gapminder %>%
  left_join(mean_table, by = "country")

不过第一种用mutate()的方法更直接高效,不需要额外的合并步骤,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:05:52