R 使用动态变量名进行变异

R 使用动态变量名进行变异,r,dplyr,R,Dplyr,我有一个带有两列的DF,我想用mutate来抵消我的第二列。问题是列名是可变的,我不知道在这种情况下如何使用mutate 我试着仿效这个例子,但我没能达到我的目标 例如: df <- data.frame(x = 1:150, y = 1:150) df %>% mutate(x = lag(x, 1)) df% 突变(x=滞后(x,1)) 我的变量x在函数外部使用另一个DF的更改其名称,您可能希望将sym函数与bang运算符一起使用: variable="P

我有一个带有两列的
DF
,我想用
mutate
来抵消我的第二列。问题是列名是可变的,我不知道在这种情况下如何使用
mutate

我试着仿效这个例子,但我没能达到我的目标

例如:

df <- data.frame(x = 1:150, y = 1:150)

df %>%
    mutate(x = lag(x, 1))
df%
突变(x=滞后(x,1))

我的变量
x
在函数外部使用另一个
DF的

更改其名称,您可能希望将
sym
函数与
bang
运算符一起使用:

variable="Petal.Width"
df %>% mutate(x = lag(!!sym(variable), 1))
在函数中,您可以像这样使用
curly-curly
{{…}}
)运算符:

lag_df = function(df, variable){
  df %>% mutate(x = lag({{variable}}, 1))
}
iris %>% lag_df(Petal.Width) %>% select(x, Petal.Width)
{{variable}}
在某种程度上类似于
!!enquo(变量)

您可以在“使用dplyr编程”中了解更多信息

在函数外部,您可能希望将
sym
函数与
bang
运算符一起使用:

variable="Petal.Width"
df %>% mutate(x = lag(!!sym(variable), 1))
在函数中,您可以像这样使用
curly-curly
{{…}}
)运算符:

lag_df = function(df, variable){
  df %>% mutate(x = lag({{variable}}, 1))
}
iris %>% lag_df(Petal.Width) %>% select(x, Petal.Width)
{{variable}}
在某种程度上类似于
!!enquo(变量)

您可以在“使用dplyr编程”中了解更多信息

另一件简单的事情是使用
.data
引用管道中的数据。然后,您可以像往常一样使用
[[
选择变量


df另一件简单的事情是使用
.data
引用管道中的数据。然后可以像往常一样使用
[
选择变量

df