我有这样的小标题:
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
答案 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