Consider this simple tibble
> tibble(myvar = c(1,2,3,4,5,6),
+ myvar2 = c('a', 'b','c', 'd', 'e', 'f'))
# A tibble: 6 x 2
myvar myvar2
<dbl> <chr>
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
Now lets say you want to create lagged versions of all the variables in the tibble. If the number of lagged versions is small, then this is simply:
> tibble(myvar = c(1,2,3,4,5,6),
+ myvar2 = c('a', 'b','c', 'd', 'e', 'f')) %>%
+ mutate_all(., funs(lag1 = dplyr::lag(.,1),lag2 = dplyr::lag(.,2)))
# A tibble: 6 x 6
myvar myvar2 myvar_lag1 myvar2_lag1 myvar_lag2 myvar2_lag2
<dbl> <chr> <dbl> <chr> <dbl> <chr>
1 1 a NA NA NA NA
2 2 b 1 a NA NA
3 3 c 2 b 1 a
4 4 d 3 c 2 b
5 5 e 4 d 3 c
6 6 f 5 e 4 d
My issue is that this code is inefficient if I need to create more than 2 lagged variables, because I need to copy and paste lagn = dplyr::lag(.,n)
every time.
Is there a more efficient way to do so? Creating n lagged versions at once?
Thanks!