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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:50:28