R语言函数内按单组及多组变量group by分组并生成独立数据框的实现方法
原有代码的核心问题:你把分组规则存到了普通原子向量中,R会自动将嵌套的c("team","ID")扁平化为两个独立的字符串,最终得到的向量是c("group","team","ID","team","ID"),无法区分单变量分组和多变量组合分组;另外当分组变量是多个时,直接mutate(new=x)会因为x长度和数据框行数不匹配报错。
修正后可运行代码
library(dplyr) # 用列表存储所有分组规则,每个列表元素对应一套分组变量,支持任意长度组合 group_rules <- list("group", "team", "ID", c("team", "ID")) result <- lapply(group_rules, function(x) { group_by(mytable, across(all_of(c(x, "num")))) %>% summarise(Count = n(), .groups = "drop") %>% # 多变量分组时拼接变量名作为规则标识,避免长度不匹配报错 mutate(group_rule = paste(x, collapse = "+")) %>% as.data.frame() })
结果说明
- 最终返回的
result是长度为4的列表,每个元素对应一套分组规则的统计数据框 - 列表第4个元素就是你需要的、按
team+ID+num分组后的统计结果 - 如果需要新增其他分组规则,只要往
group_rules列表中添加对应变量名向量即可,支持3个及以上变量的组合分组
内容的提问来源于stack exchange,提问作者Ashti
相关产品推荐
相关产品推荐

