【发布时间】:2018-03-13 14:30:01
【问题描述】:
我目前正在使用 R。我有一个带有每小时时间戳的大型数据表,以及每小时的观察结果。我需要将所有在 4 小时内发生的 > 0 的观察结果分组为一个事件。示例数据如下:
Date Obs
2017-12-01 5 0.01
2017-12-01 6 0.5
2017-12-01 7 0.2
2017-12-01 8 0
2017-12-01 9 0.03
2017-12-01 10 0.01
2017-12-01 11 0
2017-12-01 12 0
2017-12-01 13 0
2017-12-01 14 0
2017-12-01 15 0
2017-12-01 16 0
2017-12-01 17 0
2017-12-01 18 1.2
2017-12-01 19 0.6
例如,前六行将是一个事件 (0.01, 0.5, 0.2, 0. 0.03, 0.01),因为只有一小时的非观察时间(零)。然后连续的 4 个零或更多的行将触发非事件。事件 2 将在下次我们得到正读数 (1.2, 0.6) 等时开始。
我尝试使用 rle() 函数来执行此操作。例如:
events <- rle(data$Obs > 0)
但是,这会为每个 0 创建一个非事件。有没有简单的解决方案?谢谢。
【问题讨论】:
-
如果观察继续发生有增无减,组可以无限扩展吗?换句话说,它会通过在有 4 个连续“0”观察值的点上拆分事物来完成你想要的吗?如果没有,您可能正在寻找某种滚动窗口功能?
-
我会说在 obs 字段中按 >0 和 0 分隔事件。然后使用来自这篇文章link 的 data.table() 在这种情况下可能会对您有所帮助。
-
@lemonC 感谢您的链接和建议,我没有考虑 data.table(),我认为该链接有一些有用的信息,我将来可以在这个项目中使用!
标签: r time-series timespan