如何在 R 中滞后数据帧的多个特定列

QFi*_*QFi 2 r lag dataframe

我想在 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)

我知道如何仅对一个滞后列执行此操作,如此处所示,但无法找到一种方法以优雅的方式对多个滞后列执行此操作。很感谢任何形式的帮助。

Ron*_*hah 5

您可以使用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)