我想在 R 中滞后数据帧的多个特定列。
让我们以这个一般性的例子为例。假设我已经定义了需要滞后的数据帧的哪些列:
Lag <- c(0, 1, 0, 1)
Lag.Index <- is.element(Lag, 1)
df <- data.frame(x1 = 1:8, x2 = 1:8, x3 = 1:8, x4 = 1:8)
Run Code Online (Sandbox Code Playgroud)
我的初始数据框:
x1 x2 x3 x4
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
Run Code Online (Sandbox Code Playgroud)
我想计算以下数据框:
x1 x2 x3 x4
1 1 NA 1 NA
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
Run Code Online (Sandbox Code Playgroud)
我知道如何仅对一个滞后列执行此操作,如此处所示,但无法找到一种方法以优雅的方式对多个滞后列执行此操作。很感谢任何形式的帮助。
您可以使用purrr'smap2_dfc按列滞后不同的值。
purrr::map2_dfc(df, Lag, dplyr::lag)
# x1 x2 x3 x4
# <int> <int> <int> <int>
#1 1 NA 1 NA
#2 2 1 2 1
#3 3 2 3 2
#4 4 3 4 3
#5 5 4 5 4
#6 6 5 6 5
#7 7 6 7 6
#8 8 7 8 7
Run Code Online (Sandbox Code Playgroud)
或者与data.table:
library(data.table)
setDT(df)[, names(df) := Map(shift, .SD, Lag)]
Run Code Online (Sandbox Code Playgroud)