gpt4 book ai didi

r - dplyr无需对变量名进行硬编码

转载 作者:行者123 更新时间:2023-12-03 14:09:36 25 4
gpt4 key购买 nike

是否可以在不对变量名进行硬编码的情况下使用dplyr的mutate函数?例如,以下代码有效,因为我将名称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


但是,当我将变量的名称设为变量时,它将不再起作用:

            > 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()函数似乎也没有帮助。

最佳答案

伟大的Hadley Wickham本人(应为他的名字!)在mutatr Google网上论坛中建议this

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

关于r - dplyr无需对变量名进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22005419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com