总结时间序列

时间:2015-02-19 19:21:23

标签: r time-series summary

我试图总结一个数据集,这是一个关于多个不同欧盟的数据的时间序列。该设备每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

2 个答案:

答案 0 :(得分:2)

这是一个快速的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

答案 1 :(得分:0)

尝试

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

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