使用动态变量名称进行突变

时间:2020-09-02 14:21:29

标签: r dplyr

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

我尝试遵循此question的示例,但我达不到目标。

示例:

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

df %>%
    mutate(x = lag(x, 1))

我的变量x用另一个DF's更改了名称。

2 个答案:

答案 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))