我用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
相反,我需要的是这个(column value is optional,我真正需要的是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