【问题标题】:Calculate lagged variable in unbalanced time series data.table计算不平衡时间序列data.table中的滞后变量
【发布时间】:2017-10-17 08:01:47
【问题描述】:

如何在不平衡的时间序列表(时间间隔不均匀)中创建滞后变量? 来自数据表 -

ts = data.table(time=c(10,15,22,25,28),value=c(7,2,14,22,11), key="time")

如何通过time-5 创建滞后变量value_lagged of value

time value value_lagged
10 7 NA
15 2 7
22 14 2
25 22 2
28 11 14

我通常的解决方案是创建一个巨大的交叉连接表,然后使用 'by' + 'min' 回到初始状态,但这不适用于 1M 表。

这个问题在这里有答案 - https://stackoverflow.com/a/36754846/1317325 但太难找到了。

【问题讨论】:

  • 只需通过引用在此处发布该评论作为答案的人来发布该评论。或者,如果您想以 Q/A 样式发布,则包含比您在问题正文中更多的详细信息。不仅仅是一个链接。
  • 我已经绊倒了这个问题 3 年了,每次都花一个小时左右来找出最快的解决方案因为 Arun 不评论不容易找到,最好在这里
  • 同意。但是,您不认为您的“问题”没有那么清楚地反映问题。只需将其作为可重现的示例,并提供更多详细信息。同样,不要只发布链接。这使您的问题在一段时间后迷失在 SO 中。除非您只想为自己记录它。
  • 我知道我最终会花更多时间进行编辑 :) 无论如何,谢谢你强迫我,现在它更具可读性

标签: r data.table time-series


【解决方案1】:

这是来自 here 的 Arun 评论的复制粘贴

ts[, value_lagged := ts[.(time=time-5), value, roll=+Inf, rollends=TRUE, mult="first", on="time"]]

对于 LEAD,您只需更改标志 -

ts[, value_lead := ts[.(time=time+5), value, roll=-Inf, rollends=TRUE, mult="first", on="time"]]

【讨论】:

  • 所以你是说这实际上只是复制品?
猜你喜欢
  • 1970-01-01
  • 2014-04-18
  • 2022-06-15
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多