我用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

推荐答案

library(data.table)
library(lubridate)

rbind(data, data[, tail(.SD, 3) , by = group][, 
          c("date", "value") := list(date %m+% months(3), NA)])[, 
              value.lag := shift(value, n = 3), by = group][order(group, date)]

#>           date group value value.lag
#>  1: 2023-01-01     a     1        NA
#>  2: 2023-02-01     a     2        NA
#>  3: 2023-03-01     a     3        NA
#>  4: 2023-04-01     a     4         1
#>  5: 2023-05-01     a     5         2
#>  6: 2023-06-01     a    NA         3
#>  7: 2023-07-01     a    NA         4
#>  8: 2023-08-01     a    NA         5
#>  9: 2023-01-01     b     6        NA
#> 10: 2023-02-01     b     7        NA
#> 11: 2023-03-01     b     8        NA
#> 12: 2023-04-01     b     9         6
#> 13: 2023-05-01     b    10         7
#> 14: 2023-06-01     b    NA         8
#> 15: 2023-07-01     b    NA         9
#> 16: 2023-08-01     b    NA        10

创建于2024-01-30,共reprex v2.0.2

R相关问答推荐

在特定列上滞后n行,同时扩展框架的长度

有没有一种方法可以从函数中创建一个值的列表,然后将这些值变成R中的直方图?我一直觉得不行

随机森林回归:下拉列重要性

在不安装软件包的情况下测试更新

如何使用按钮切换轨迹?

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

制作等距离的线串副本

如何改变x轴比例的列在面

在df中保留原始变量和新变量

从外部文件读取多个值作为字符向量

Select 季度月值

`lazy_dt`不支持`dplyr/across`?

根据列表中项目的名称合并数据框和列表

从多面条形图中删除可变部分

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

R+reprex:在呈现R标记文件时创建可重现的示例

我需要使用ggplot2制作堆叠条形图

名字的模糊匹配

位置_道奇在geom_point图中不躲避

网络抓取NBA.com