[英]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.