2011-09-27 15 views
9

タイムウィンドウを適用したい不規則な時系列(xts in R)があります。たとえば、次のような時系列を与え、私は2009-09-22 00:00:00から始め、各離散3時間のウィンドウにありますどのように多くの観測のようなものを計算したい:不規則な時系列の定期的な分析

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

sのインデックスをalign.timeに入力して、興味のある期間に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

おそらく 'merge()'のアイデアが私の必要なものです - 希望の間隔のエンドポイントでシーケンスを作成し、それをシーケンスにマージしますか? –

+0

@KenWilliams:あなたは正しい道を歩いています。私は私の答えを更新しました... –

関連する問題