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

dplyr中group_vars()返回值与group_by()变量不符的技术疑问

问题原因与解决方法

这是因为dplyr里的summarise()函数默认会剥离最内层的分组,具体逻辑如下:

  • 当存在多层分组(比如示例1的cyl, vs),执行summarise()后,最内层的分组会被移除,仅保留外层分组,所以此时group_vars()只会返回剩下的外层分组cyl。
  • 当只有单个分组(比如示例2的cyl),执行summarise()后,这个唯一的分组会被直接剥离,数据框变回非分组状态,因此group_vars()返回character(0)。

如果想保留所有原始分组,只需在summarise()里添加.groups = "keep"参数:

示例1修改版

library(tidyverse)
mtcars %>%
  group_by(cyl, vs) %>%
  summarise(cyl_n = n(), .groups = "keep") %>%
  group_vars()
# 返回 "cyl" "vs"

示例2修改版

mtcars %>%
  group_by(cyl) %>%
  summarise(cyl_n = n(), .groups = "keep") %>%
  group_vars()
# 返回 "cyl"

另外补充.groups参数的常用选项:

  • drop_last:默认行为,移除最内层分组
  • keep:保留所有原始分组
  • drop:移除所有分组,返回普通数据框
  • rowwise:将结果转为按行分组的格式

内容的提问来源于stack exchange,提问作者anderwyang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:39:52