R语言aggregate函数如何实现包含全部分组维度的汇总计算?
实现方法
1. Tidyverse方案(最简)
使用dplyr包的cube()函数,原生支持生成所有分组维度组合的汇总结果:
library(dplyr) # 直接输出和你需求格式完全一致的结果 res <- warpbreaks %>% cube( breaks = mean(breaks), .by = c(wool, tension) )
结果中的NA代表对应维度不参与分组:
wool=NA且tension=NA:全数据集总体均值wool=NA且tension有值:仅按tension分组tension=NA且wool有值:仅按wool分组- 两列都有值:按两个因子的交叉组合分组
如果需要同时计算多个统计量,直接在cube内补充即可:
res_full <- warpbreaks %>% cube( mean_break = mean(breaks), sd_break = sd(breaks), sample_n = n(), .by = c(wool, tension) )
2. 纯Base R方案(无需第三方包)
如果不想依赖tidyverse,可以手动批量计算所有分组组合再合并:
# 定义所有需要的分组组合 group_forms <- list(~1, ~tension, ~wool, ~wool + tension) # 批量运行aggregate后按列合并 res <- do.call(rbind, lapply(group_forms, function(f) { agg <- aggregate(formula(paste("breaks", as.character(f))), data = warpbreaks, FUN = mean) # 补全缺失的分组列,统一列顺序 for (col in c("wool", "tension")) { if (!col %in% names(agg)) agg[[col]] <- NA } agg[, c("wool", "tension", "breaks")] }))
内容的提问来源于stack exchange,提问作者ConMan
相关产品推荐
相关产品推荐

