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

如何在R的dplyr循环中保留分组列的原始列名?

解决方法

这里有几种简单的修改方式,能让输出列名显示原始列名而非get(g):

方法1:使用整洁评估(推荐)

利用dplyr的整洁评估语法,把字符串形式的列名转为符号注入到group_by中,这样分组后的列名会直接保留原始名称:

library(dplyr)

df <- mtcars
groups <- c('cyl', 'hp')

for(g in groups) {
  group_counts <- df %>% 
    group_by({{ sym(g) }}) %>%  # sym()将字符串转成符号,{{}}注入到group_by
    count()
  
  print(group_counts)
}

方法2:分组后重命名列

如果习惯用get(),可以在计数完成后把get(g)对应的列重命名为原始列名:

library(dplyr)

df <- mtcars
groups <- c('cyl', 'hp')

for(g in groups) {
  group_counts <- df %>% 
    group_by(get(g)) %>% 
    count() %>% 
    rename(!!g := `get(g)`)  # !!强制求值变量g,作为新列名替换原列
  
  print(group_counts)
}

方法3:使用group_by_at

group_by_at支持直接传入字符串形式的列名,不需要额外转换:

library(dplyr)

df <- mtcars
groups <- c('cyl', 'hp')

for(g in groups) {
  group_counts <- df %>% 
    group_by_at(vars(g)) %>%  # vars(g)接收字符串列名
    count()
  
  print(group_counts)
}

这三种方法都能实现你要的效果,输出的第一列会显示cyl、hp这样的原始列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:50:32