我试图总结一个数据集,这是一个关于多个不同欧盟的数据的时间序列。该设备每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
答案 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)
你需要稍微研究一下,但它很强大。