R语言dplyr动态选择多列执行group_by分组报错问题问询
问题原因
.data[[ ]] 仅支持传入单个字符串做索引,当grpByCols是多元素字符向量时自然会触发异常。要实现兼容单/多列的动态分组,有以下几种可行方案:
方案1:使用across() + all_of()(推荐,dplyr 1.0.0及以上版本支持)
这是当前dplyr官方推荐的标准写法,同时兼容单列、多列场景:
library(dplyr) data(mpg) # 单列场景可正常运行 grpByCols <- "model" mpg %>% group_by(across(all_of(grpByCols))) # 多列场景正常运行 grpByCols <- c("model", "manufacturer") mpg %>% group_by(across(all_of(grpByCols)))
如果允许传入的列名存在缺失,可以把all_of换成any_of,不存在的列会自动被忽略。
方案2:使用!!!爆炸运算符 + syms()(兼容新旧版本dplyr)
如果需要兼容更早版本的dplyr,可以把字符向量转为符号列表后用爆炸运算符注入:
library(dplyr) library(rlang) data(mpg) grpByCols <- c("model", "manufacturer") mpg %>% group_by(!!!syms(grpByCols))
方案3:使用group_by_at()(旧版本兼容,已软弃用)
如果是维护老项目用到旧版dplyr,可以用这个接口,新代码不推荐使用:
library(dplyr) data(mpg) grpByCols <- c("model", "manufacturer") mpg %>% group_by_at(grpByCols)
内容的提问来源于stack exchange,提问作者guna
相关产品推荐
相关产品推荐

