【发布时间】:2019-07-22 16:16:19
【问题描述】:
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 中的宏(编写代码的程序)。
对这个愚蠢的问题表示歉意,非常感谢您的帮助。
【问题讨论】:
-
试试
mutate(!! r[i] := dense_rank(desc(!! rlang::sym(r[i]))) -
您想创建一个具有不同名称的 new 列,还是改变现有列?如果是后者,请使用
mutate_at而不是 rlang。 -
mutate_at()可以非常方便地处理这类事情。你甚至可以起新名字。喜欢mutate_at(exec_parties2, r, list(T = ~dense_rank(desc(.) ) ) ) -
我不知道 dplyr 引用了所有输入。非常感谢!