将字符转换为变量名

Converting characters into variable names

exec_parties2是一个包含以下12个变量的数据框:

"CE""DB""ES""FC""FF""HF""HR""JE""JF" "JR" "SE" "SR"

我想创建一个对每个变量进行排名的循环

这是第一个变量的工作示例:

exec_parties2<-exec_parties2 %>% mutate(CE_T=eval(dense_rank(CE)))

我正在尝试这样的事情:

r<-colnames(exec_parties2)

i=1

for(i in r){

  exec_parties3<-exec_parties2 %>% mutate(eval(r[i])=dense_rank(desc(r[i])))   

}

显然,它不起作用

我知道这是可行的,应该在某处记录下来。我只是找不到它。这类似于SAS(编写代码的程序)中的宏。

对于这个愚蠢的问题深表歉意,非常感谢您的帮助。

在当前的 for 循环中,我们可以在 mutate 中进行赋值 (:=),方法是在将字符串列名称转换为符号时评估 (!!) (sym) 并评估 (!!)

r <- colnames(exec_parties2)
for(nm in r) {

    exec_parties2 <- exec_parties2 %>% 
                          mutate(!! nm := dense_rank(desc(!! rlang::sym(nm))))
  }  

注意:如评论中所述,使用 mutate_at

可以轻松完成此操作