首页 > 解决方案 > 如何在R中滞后数据框的多个特定列

问题描述

我想滞后 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)

我的初始数据框:

        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 

我想计算以下数据框:

        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 

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

标签: rdataframelag

解决方案


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

或与data.table

library(data.table)
setDT(df)[, names(df) := Map(shift, .SD, Lag)]

推荐阅读