我习惯于data.table::shift
滞后我的时间序列。我现在想要的是扩展日期以考虑超出时间序列最大日期的转变。
例如,如果我有一个于 2023 年 5 月结束的每月时间序列,并且我滞后了 3 个月,那么我想要获得的是于 2023 年 8 月结束的平移时间序列。
让事情变得复杂的是,我必须按组来做这件事。
让我举一个简单的例子。
library(data.table)
dates <-
rep(seq.Date(
from = as.Date("2023-01-01"),
to = as.Date("2023-05-01"),
by = "month"
), times = 2)
groups <- c(rep("a", 5), rep("b", 5))
values <- 1:10
data <- data.table(date=dates,group=groups,value=values)
如果我这样做data[, value.lag := shift(value, n = 3), by = group]
,我会得到这个,它仍然在 2023 年 5 月结束,这不是我想要的:
date group value value.lag
2023-01-01 a 1 NA
2023-02-01 a 2 NA
2023-03-01 a 3 NA
2023-04-01 a 4 1
2023-05-01 a 5 2
2023-01-01 b 6 NA
2023-02-01 b 7 NA
2023-03-01 b 8 NA
2023-04-01 b 9 6
2023-05-01 b 10 7
我需要的是这个(列值是可选的,我真正需要的是 value.lag):
date group value value.lag
2023-01-01 a 1 NA
2023-02-01 a 2 NA
2023-03-01 a 3 NA
2023-04-01 a 4 1
2023-05-01 a 5 2
2023-06-01 a NA 3
2023-07-01 a NA 4
2023-08-01 a NA 5
2023-01-01 b 6 NA
2023-02-01 b 7 NA
2023-03-01 b 8 NA
2023-04-01 b 9 6
2023-05-01 b 10 7
2023-06-01 b NA 8
2023-07-01 b NA 9
2023-08-01 b NA 10
创建于 2024-01-30,使用reprex v2.0.2