我有一个包含两列的DF
,我想用mutate
来补偿第二列。问题在于列名是可变的,在这种情况下我不知道如何使用mutate
。
我尝试遵循此question的示例,但我达不到目标。
示例:
df <- data.frame(x = 1:150, y = 1:150)
df %>%
mutate(x = lag(x, 1))
我的变量x
用另一个DF's
更改了名称。
答案 0 :(得分:1)
在函数之外,您可能想将sym
函数与bang-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(variable)
。
您可以在“使用dplyr编程”中详细了解 “ vignette。
答案 1 :(得分:1)
另一种简单的操作是使用.data
引用管道中的数据。然后,您可以像往常一样使用[[
来选择变量。
df <- data.frame(x = 1:150, y = 1:150)
variable <- "x"
df %>%
mutate(x = lag(.data[[variable]], 1))