簡體   English   中英

總結時間序列

[英]Summarize time series

我正在嘗試總結一個數據集,該數據集是多個不同歐盟的數據的時間序列。 該設備每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

這是一個快速的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

嘗試

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

您需要研究一下,但功能強大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM