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

如何用group_map逐列计算数据框分组均值?避免嵌套mapply

按分组计算各列均值的简洁实现方法

给定测试数据框(添加随机种子保证结果可复现):

set.seed(123)
df <- data.frame(group = c("A", "A", "B", "B", "C", "C"),
                 size = sample(1:100, 6),
                 length = sample(10:30, 6))

方法1:dplyr + across()(推荐)

借助dplyr的分组语法结合across(),可以一次性对所有非分组列计算均值,代码清晰易读:

library(dplyr)

df %>%
  group_by(group) %>%
  summarize(across(everything(), mean, .names = "mean_{.col}"))
  • across(everything())指定对除分组列外的所有列应用计算
  • .names参数用于自定义结果列名,让输出更直观

方法2:base R aggregate() 函数

无需额外加载包,用base R原生函数即可实现:

aggregate(. ~ group, data = df, FUN = mean)
  • . ~ group表示以group为分组键,对其余所有列执行mean计算

方法3:data.table 高效实现

如果处理大规模数据,data.table的性能优势明显,写法同样简洁:

library(data.table)

setDT(df)[, lapply(.SD, mean), by = group]
  • setDT()将普通数据框转换为data.table对象
  • .SD代表所有非分组列,lapply(.SD, mean)批量计算均值
  • by = group指定分组依据

以上方法均避免了嵌套mapply或逐列调用group_map的繁琐操作,可直接批量完成分组均值计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:26:00