将x滞后值添加到tbl

时间:2018-07-11 07:46:36

标签: r dplyr

我有这样的小标题:

df <- tibble(value = rnorm(500))

如何将x(例如x = 10)的滞后值添加到此tbl(最好在dplyr管道中)?我想将这些滞后变量添加为新列。

我可以做一个简单的滞后:

lag_df <- df %>%
  mutate(value_lag = lag(value, n = 1)) %>%   # first lag
  filter(!is.na(value_lag))    # remove NA

手动执行3次滞后看起来像这样:

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

1 个答案:

答案 0 :(得分:1)

这不是完整的dplyr解决方案,但是一种方法是为每个滞后值创建一列,并将其cbind保留到原始数据帧,并使用{{1 }}

NA

以残破的技巧将其完全保留在na.omit()中的丑陋尝试

library(dplyr)
cbind(df, sapply(1:10, function(x) lag(df$value, n = x))) %>%
   na.omit()

基本的R方法比这更清洁,但是绝对应该有一个比这更好的方法。


版本短一些

tidyverse