【问题标题】:Summarize time series总结时间序列
【发布时间】:2015-02-19 19:21:23
【问题描述】:

我试图总结一个数据集,它是多个不同欧盟的时间序列数据。该设备每 15 分钟记录一次数据,但我希望将其汇总为每小时、6 小时和每天的不同时间间隔进行分析。我已经浏览了列表中的几个帖子,但都没有运气。任何帮助将不胜感激。

示例数据如下

Signal  Date         Timedate              ID  Tx  Block
49     2014-08-14   08/14/2014 21:00:00   15   1   1
35     2014-08-14   08/14/2014 21:15:00   15   1   1
149    2014-08-14   08/14/2014 21:30:00   15   1   1
135    2014-08-14   08/14/2014 21:45:00   15   1   1

在这种形式下,大约有 70k 多条记录。对于每 4 个条目(每小时),数据需要压缩为 1 个记录,依此类推,信号总和。

最终输出

Signal  Date         Timedate              ID  Tx  Block
368    2014-08-14   08/14/2014 21:00:00   15   1   1

【问题讨论】:

  • 所以,为了清楚起见并提供搜索提示:您需要“ID”、“tx”和“块”类别中的“信号”aggregate()-ed 的总和,而您想要标有开始时间的时间段吗?

标签: r time-series summary


【解决方案1】:

这是一个快速的data.table 总结,但您可以使用基本 R 类似地执行此操作。简而言之,您需要做的就是将 Timedate 转换为 POSIXct 类,同时删除分钟和秒,然后一个简单的聚合

library(data.table)
setDT(df)[, Timedate := as.POSIXct(substr(Timedate, 1, 19), format = "%m/%d/%Y %H")]
df[, .(Signal = sum(Signal)), by = .(Date, Timedate, ID, Tx, Block)]
#          Date            Timedate ID Tx Block Signal
# 1: 2014-08-14 2014-08-14 21:00:00 15  1     1    368

聚合部分也可以用基础 R 轻松完成,只是

aggregate(Signal ~., df, sum)
#         Date            Timedate ID Tx Block Signal
# 1 2014-08-14 2014-08-14 21:00:00 15  1     1    368

另一个选项(如果数据已排序并且始终间隔为 4),您可以创建一个索引并通过它进行聚合,而无需修改原始数据中的 Timedate

setDT(df)[, indx := gl(nrow(df)/4, nrow(df)/4)]
df[, .(Signal = sum(Signal), Timedate = Timedate[1L]),  by = .(Date, ID, Tx, Block, indx)]
#          Date ID Tx Block indx Signal            Timedate
# 1: 2014-08-14 15  1     1    1    368 08/14/2014 21:00:00

【讨论】:

    【解决方案2】:

    试试

    library(zoo)
    ?aggregate.zoo
    examples(aggregate.zoo)
    

    你需要研究一下,但它很强大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2020-11-27
      • 2013-08-19
      • 1970-01-01
      • 2018-05-15
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多