如何用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
相关产品推荐
相关产品推荐

