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

如何在单个R管道中执行多次分组汇总并复用已丢弃变量

解决方案

可以借助purrr包的映射功能,在单次流程中生成所有需要的汇总表,再直接导出到Excel的不同工作表,全程用管道串联:

library(dplyr)
library(purrr)
library(rio)

set.seed(123)

df <- data.frame(ID = c(1:20),
                 year = sample(2015:2020, 20, replace = T),
                 Age_group = sample(c("20-29", "30-39", "40-49", "50-59"), 20, replace = T),
                 sex = sample(c("male", "female"), 20, replace = T),
                 count = sample(1:100, 20, replace = T))

# 定义需要的分组组合
groupings <- list(
  "仅按ID" = c("ID"),
  "按ID+年份" = c("ID", "year"),
  "按ID+年份+年龄组" = c("ID", "year", "Age_group")
)

# 生成所有汇总表并导出到Excel
groupings %>%
  map(~ df %>% 
        group_by_at(.x) %>% 
        summarize(sum_of_count = sum(count), .groups = "drop")) %>%
  export("汇总结果.xlsx")

代码说明:

  • groupings是命名列表,每个元素对应一组分组变量,名称会自动作为Excel的工作表名
  • map()遍历每个分组组合,用group_by_at()动态指定分组列,避免重复编写分组代码
  • .groups = "drop"确保汇总后取消分组状态,得到结构干净的数据框
  • rio::export()直接支持命名列表输入,自动将每个列表元素导出到对应名称的工作表中

如果不想额外加载purrr,也可以用基础R的lapply实现相同效果:

library(dplyr)
library(rio)

groupings <- list(
  "仅按ID" = c("ID"),
  "按ID+年份" = c("ID", "year"),
  "按ID+年份+年龄组" = c("ID", "year", "Age_group")
)

lapply(groupings, function(groups) {
  df %>% 
    group_by(across(all_of(groups))) %>% 
    summarize(sum_of_count = sum(count), .groups = "drop")
}) %>% export("汇总结果.xlsx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:33:12