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

如何在dplyr中结合summarize与summarise_if实现分组聚合

合并分组计数与数值变量汇总的dplyr实现

你可以在同一个summarise()调用中同时完成分组计数和数值变量的汇总,不需要拆分两步。这里推荐使用dplyr的across()函数(替代已软弃用的summarise_if()),代码如下:

library(dplyr)

# 加载数据集
data("iris")

# 一步完成分组计数+数值变量汇总
iris_summary <- iris %>%
  group_by(Species) %>%
  summarise(
    观测数 = n(),  # 统计每组的观测数量,列名可自定义
    # 对所有数值型变量计算均值,可替换为sum、median、max等函数
    across(where(is.numeric), mean, .names = "均值_{.col}")
  )

print(iris_summary)

代码说明

  • group_by(Species):按Species列分组
  • n():直接生成每组的观测计数
  • across(where(is.numeric), ...):自动识别所有数值型变量,对其应用指定的汇总函数(这里用mean做示例),.names参数可以自定义汇总后的列名格式,让结果更清晰

如果你仍想使用旧版的summarise_if(),可以这么写:

iris_summary <- iris %>%
  group_by(Species) %>%
  summarise(
    观测数 = n(),
    # 调用summarise_if并移除重复的Species列
    !!!summarise_if(., is.numeric, mean) %>% select(-Species)
  )

为什么分步执行会出错

如果先单独执行summarise(n = n()),此时分组后的数据集仅保留Species和计数列,原有的数值变量已经被丢弃,后续的summarise_if()找不到需要汇总的数值变量,因此会出现错误。必须在同一个summarise()步骤中同时完成两项操作,才能保留所有需要处理的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:31:12