如何在dplyr :: lead / lag函数中使用变量名

时间:2019-07-24 04:25:43

标签: r dplyr tidyverse

我有一个小标题,想在其中滞后/引导各个列并检查它们的相关性。 当前,对于每个列名,我都必须有一个单独的函数来执行超前/滞后和相关函数。 有没有一种方法可以将列名作为变量传递,然后将该变量与lag / lead一起使用

#This is what I have tried unsuccessfully so far

library(janitor)
library(tidyverse)

(x <- mtcars %>% 
    as_tibble())

var_to_lag <- "carb"    

# Tried without success
x %>% mutate(lag_var = lag(!!var_to_lag, 1))
x %>% mutate(lag_var = lag(contains(var_to_lag), 1))
x %>% mutate(lag_var = lag(vars(contains(var_to_lag)), 1))
x %>% mutate(lag_var = lag(vars(!!var_to_lag), 1))

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用mutate_at接受字符串输入

library(dplyr)
x %>%  mutate_at(vars(var_to_lag), list(lag_var = ~lag(.)))

我们也可以使用get

x %>% mutate(lag_var = lag(get(var_to_lag)))

或者首先将var_to_lag转换为符号(sym),然后求值(!!

x %>% mutate(lag_var = lag(!!sym(var_to_lag)))