本文介绍了dplyr没有硬编码变量名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以使用dplyr的mutate函数,而无需对变量名进行硬编码?例如,以下代码工作,因为我硬编码名称Var1:
Is it possible to use dplyr's mutate function without hard-coding the variable names? For example, the following code works, because I hard-code the name Var1:
> d=expand.grid(1:3, 20:22)
> d
Var1 Var2
1 1 20
2 2 20
3 3 20
4 1 21
5 2 21
6 3 21
7 1 22
8 2 22
9 3 22
> d=mutate(d, x=percent_rank(Var1))
> d
Var1 Var2 x
1 1 20 0.000
2 2 20 0.375
3 3 20 0.750
4 1 21 0.000
5 2 21 0.375
6 3 21 0.750
7 1 22 0.000
8 2 22 0.375
9 3 22 0.750
但是,当我将变量的名称变为一个变量时,它不再有效:
However, when I make the variable's name a variable, it no longer works:
> my.variable='Var1'
> d=mutate(d, x=percent_rank(my.variable))
> d
Var1 Var2 x
1 1 20 NaN
2 2 20 NaN
3 3 20 NaN
4 1 21 NaN
5 2 21 NaN
6 3 21 NaN
7 1 22 NaN
8 2 22 NaN
9 3 22 NaN
eval()和as.symbol()函数似乎也没有帮助。
The eval() and as.symbol() functions don't seem to help, either.
推荐答案
伟大的哈德利·威克姆(Hadley Wickham)自己(以他的名字而闻名),建议您 mutatr
Google Groups:
The great Hadley Wickham himself (hallowed be his name!) suggested this on the mutatr
Google Groups:
d <- expand.grid(1:3, 20:22)
my.variable <- 'Var1'
percent_rank <- function(x) rank(x)/max(rank(x))
call <- substitute(mutate(d, percent_rank(var)),
list(var = as.name(my.variable)))
eval(call)
# Var1 Var2 percent_rank(Var1)
# 1 1 20 0.250
# 2 2 20 0.625
# 3 3 20 1.000
# 4 1 21 0.250
# 5 2 21 0.625
# 6 3 21 1.000
# 7 1 22 0.250
# 8 2 22 0.625
# 9 3 22 1.000
这篇关于dplyr没有硬编码变量名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!