如何在dplyr中高效地按多列进行分组?
高效给dplyr的
group_by()传入多列参数 当需要按10列以上分组时,手动逐个输入列名确实繁琐,以下几种方法可以帮你高效实现批量分组:
1. 推荐:用across()(dplyr 1.0.0+)
across()是dplyr 1.0.0版本引入的批量列处理函数,搭配all_of()可以直接解析列名向量:
library(dplyr) df <- data.frame(a=c(1,2,1,3,1,4,1,5), b=c(2,3,4,1,2,3,4,5)) cols <- colnames(df) # 按所有列分组 df %>% group_by(across(all_of(cols))) %>% summarise(count = n())
如果只需要部分列,还可以用列选择器快速筛选,比如按以特定字符开头的列分组:
# 按所有以"a"开头的列分组 df %>% group_by(across(starts_with("a"))) %>% summarise(count = n())
2. 直接解析列名向量:all_of()/syms()
你也可以直接用all_of()将列名向量传入group_by(),无需额外包装:
df %>% group_by(all_of(cols)) %>% summarise(count = n())
如果需要更灵活的非标准求值,可结合rlang包的syms()和!!!(解引用):
library(rlang) df %>% group_by(!!!syms(cols)) %>% summarise(count = n())
3. 旧版本兼容:group_by_at()
如果你的dplyr版本低于1.0.0,可以使用group_by_at()函数:
df %>% group_by_at(cols) %>% summarise(count = n())
内容的提问来源于stack exchange,提问作者Esben Eickhardt
相关产品推荐
相关产品推荐

