10

タイム ウィンドウ処理を適用したい不規則な時系列 ( )xtsがあります。Rたとえば、次のような時系列が与えられた場合、 から開始して、離散した 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

ご指導ありがとうございます。

4

1 に答える 1

11

を使用align.timeして、関心のある期間に のインデックスをs挿入します。次に、 を使用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)
于 2011-09-27T16:02:50.333 に答える