如何按数据框列位置而非列名执行group_by分组?(附R代码场景)
按数据集第一列执行group_by()的R代码修改方案
原代码通过指定列名Pop进行分组,要改成按数据集第一列分组且不写具体列名,有以下几种简洁可行的方法:
- 方法1:使用
across(1)(dplyr 1.0.0及以上版本支持)
这是最直接的写法,across(1)代表选取数据框的第一列作为分组依据:
tor <- df %>% group_by(across(1)) %>% group_modify(~ .x %>% adorn_totals()) %>% ungroup
- 方法2:通过列名索引结合
all_of()
先获取第一列的列名,再用all_of()传入group_by,这种方式会保留原列名,避免分组后列名异常:
tor <- df %>% group_by(all_of(names(df)[1])) %>% group_modify(~ .x %>% adorn_totals()) %>% ungroup
- 方法3:tidyeval求值写法
利用符号求值的方式,动态获取第一列列名并传入group_by:
tor <- df %>% group_by(!!sym(names(df)[1])) %>% group_modify(~ .x %>% adorn_totals()) %>% ungroup
注意:你原来尝试的group_by(df[,1])不推荐使用,因为这种写法会将第一列以数据框形式传入分组,最终分组后的列名会变成df[,1],而非原数据框的列名,容易导致后续数据处理出现问题。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

