如何用map类函数实现按cyl与mtcars_list各变量分组汇总?
按cyl与变量列表逐一组合分组计算均值的实现方案
你可以借助purrr包的map()函数(属于tidyverse生态),遍历变量列表中的每个元素,将其与固定分组变量cyl组合,完成分组汇总。以下是具体实现:
完整代码示例
library(tidyverse) # 定义变量列表、固定分组变量、待汇总变量 mtcars_list <- c("vs","am","gear","carb") fixed_group <- "cyl" summarise_var <- "disp" # 遍历变量列表,生成所有组合的汇总结果 final_result <- mtcars_list %>% map_dfr(function(current_var) { mtcars %>% # 将字符型变量名转换为dplyr可识别的符号,实现动态分组 group_by(!!sym(fixed_group), !!sym(current_var)) %>% # 计算disp的均值,同时清除分组状态 summarise(mean_disp = mean(!!sym(summarise_var)), .groups = "drop") %>% # 可选:添加列标记当前是与哪个变量组合的分组 mutate(combined_with = current_var) }) # 查看结果 print(final_result)
代码说明
map_dfr():遍历mtcars_list的同时,自动将所有子结果合并为一个数据框(替代map()+bind_rows()的组合,更简洁)!!sym():把字符型的变量名转换成dplyr语法能识别的符号变量,实现动态分组的需求.groups = "drop":确保汇总后清除分组状态,返回普通数据框,避免后续操作的潜在问题combined_with列:可选字段,用于区分每条结果是cyl与哪个变量的组合,不需要可直接删除该行
运行后就能得到所有cyl与mtcars_list中变量组合的disp均值,比如cyl=6且vs=0、cyl=4且vs=1等所有场景的计算结果。
内容的提问来源于stack exchange,提问作者FrancoBattiato
相关产品推荐
相关产品推荐

