如何无需重复代码实现多列无交集的group_by分组统计?
解决dplyr中重复分组汇总的问题
要避免重复编写分组汇总代码,可以借助purrr包的遍历函数,一次性处理多个分组变量:
方法一:使用purrr::map遍历分组变量
library(dplyr) library(purrr) # 定义需要分组的变量名 group_cols <- c("cyl", "am") # 遍历每个分组变量执行汇总 map(group_cols, ~ { mtcars %>% group_by(.data[[.]]) %>% summarise(mean_disp = mean(disp)) })
运行后会返回一个列表,其中两个元素分别对应按cyl和am分组的汇总结果,和你期望的输出一致:
- 第一个元素是按
cyl分组的tibble:# A tibble: 3 × 2 cyl mean_disp <dbl> <dbl> 1 4 105. 2 6 183. 3 8 353. - 第二个元素是按
am分组的tibble:# A tibble: 2 × 2 am mean_disp <dbl> <dbl> 1 0 290. 2 1 144.
补充说明
.data[[.]]是dplyr中引用字符串格式变量的标准方式,确保遍历过程中能正确识别分组列。- 如果希望直接打印每个结果而非返回列表,可以把
map换成walk,它会直接输出每个分组的汇总结果:walk(group_cols, ~ { print(mtcars %>% group_by(.data[[.]]) %>% summarise(mean_disp = mean(disp))) })
内容的提问来源于stack exchange,提问作者user2165379
相关产品推荐
相关产品推荐

