R 将x个滞后值添加到tbl

R 将x个滞后值添加到tbl,r,dplyr,R,Dplyr,我有一个像这样的tibble: df <- tibble(value = rnorm(500)) lag_df <- df %>% mutate(value_lag1 = lag(value, n = 1)) %>% # first lag mutate(value_lag2 = lag(value, n = 2)) %>% # second lag mutate(value_lag3 = lag(value, n = 3)) %>%

我有一个像这样的tibble:

df <- tibble(value = rnorm(500))
lag_df <- df %>%
  mutate(value_lag1 = lag(value, n = 1)) %>%   # first lag
  mutate(value_lag2 = lag(value, n = 2)) %>%   # second lag
  mutate(value_lag3 = lag(value, n = 3)) %>%   # third lag
  filter(!is.na(value_lag1))    # remove NA
  filter(!is.na(value_lag2))    # remove NA
  filter(!is.na(value_lag3))    # remove NA
理想情况下,在dplyr管道中,如何将x(例如x=10)滞后值添加到此tbl中?我想将这些滞后变量添加为新列

我只需要一个滞后时间就可以做到:

lag_df <- df %>%
  mutate(value_lag = lag(value, n = 1)) %>%   # first lag
  filter(!is.na(value_lag))    # remove NA
手动执行3次延迟将如下所示:

df <- tibble(value = rnorm(500))
lag_df <- df %>%
  mutate(value_lag1 = lag(value, n = 1)) %>%   # first lag
  mutate(value_lag2 = lag(value, n = 2)) %>%   # second lag
  mutate(value_lag3 = lag(value, n = 3)) %>%   # third lag
  filter(!is.na(value_lag1))    # remove NA
  filter(!is.na(value_lag2))    # remove NA
  filter(!is.na(value_lag3))    # remove NA
不是一个完整的dplyr解决方案,但一种方法是为每个滞后值创建一列,并将其cbind到原始daatframe,然后使用NA.omit删除具有NA值的行

一次丑陋的尝试,用我残破的技能让它完全保持整洁

library(tidyverse)
tibble(n=1:10)  %>% mutate(output = map2(list(df),n ,function(x,y){
    x %>% mutate(value = lag(value,y))
})) %>% spread(n,output) %>% unnest() %>% na.omit()
BaseR方法比这个干净得多,但肯定有更好的方法

还有一个稍短的版本

map2(list(df), 1:10, function(x, y) {
  x %>% mutate(value = lag(value,y))
    }) %>%
bind_cols() %>% na.omit()

@RonakShah是的,我想将每个滞后添加为一个新列。将值视为首先观察第一行的时间序列。当然,第一行没有任何滞后值,因此为NA,但dplyr lag函数会自动处理该值