R语言中如何调用存储为字符串的多列排序变量?
解决方法:用字符串变量指定arrange的排序列
你当前的代码问题在于,paste0(order_var)会生成一个完整的字符串"ID, AGE, SEX",而arrange()需要的是数据框的列名(不是字符串形式的列名),所以会报错找不到名为ID, AGE, SEX的变量。
正确的做法是先把这个逗号分隔的字符串拆分成单独的列名字符向量,再用dplyr的工具把字符串转换成arrange()能识别的列引用,具体有几种方式:
方法1:用all_of()(推荐,dplyr 1.0.0及以上版本)
先把字符串分割成干净的列名向量,再用all_of()传入:
library(dplyr) order_var <- "ID, AGE, SEX" # 分割字符串并去除每个元素的空格 order_vec <- trimws(unlist(strsplit(order_var, ","))) # 排序 df %>% arrange(all_of(order_vec))
如果安装了stringr包,也可以用更简洁的分割方式:
order_vec <- stringr::str_split(order_var, ",\\s+")[[1]]
方法2:用rlang的syms()和!!!
通过rlang包的符号转换工具,把字符串向量转换成变量符号,再用!!!展开:
library(dplyr) library(rlang) order_vec <- trimws(unlist(strsplit(order_var, ","))) df %>% arrange(!!!syms(order_vec))
方法3:旧版dplyr用arrange_at()
如果你的dplyr版本低于1.0.0,可以用arrange_at():
df %>% arrange_at(vars(order_vec))
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

