2011-09-27 51 views
9

我有一個不規則的時間序列(xtsR),我想對其應用一些時間窗口。例如,給定一個時間序列像下面,我想計算之類的東西有多少個觀察有在每一個離散3小時的窗口,從2009-09-22 00:00:00開始:對不規則時間序列的定期分析

library(lubridate) 
s <- xts(c("OK", "Fail", "Service", "OK", "Service", "OK"), 
     ymd_hms(c("2009-09-22 07:43:30", "2009-10-01 03:50:30", 
        "2009-10-01 08:45:00", "2009-10-01 09:48:15", 
        "2009-11-11 10:30:30", "2009-11-11 11:12:45"))) 

我顯然不能用period.apply()split()要做到這一點,因爲那些會忽略沒有意見的時期,我不能給它一個開始時間。

我期望的輸出很簡單計數的問題(雖然,當然,我真正的任務是,每段更復雜!)會是這樣的,如果我彙總3天時間:

2009-09-22 1 
2009-09-25 0 
2009-09-28 0 
2009-10-01 3 
2009-10-04 0 
2009-10-07 0 
2009-10-10 0 
2009-10-13 0 
2009-10-16 0 
2009-10-19 0 
2009-10-22 0 
2009-10-25 0 
2009-10-28 0 
2009-10-31 0 
2009-11-03 0 
2009-11-06 0 
2009-11-09 2 

感謝您的任何指導。

回答

11

使用align.times的索引放入您感興趣的期間。然後使用period.apply查找每個3小時窗口的長度。然後將它與一個空的xts對象合併,該對象具有所有您想要的索引值。

# align index into 3-hour blocks 
a <- align.time(s, n=60*60*3) 
# find the number of obs in each block 
count <- period.apply(a, endpoints(a, "hours", 3), length) 
# create an empty xts object with the desired index 
e <- xts(,seq(start(a),end(a),by="3 hours")) 
# merge the counts with the empty object and fill with zeros 
out <- merge(e,count,fill=0) 
+0

這不會做我在找的東西 - 讓我給原始問題添加更多細節。 –

+0

也許'合併()'的想法是我需要的 - 但是用我想要的間隔端點創建一個序列,然後將它合併到序列中? –

+0

@KenWilliams:你在正確的軌道上。我已經更新了我的答案... –

相關問題