xts

2012-03-26 2 views
3

からデータの各日の最初の5分を取得またはサブセット化細かいデータから毎日の時系列データの最初の5分をサブセット化したいと思いますが、最初の5分は同じ毎日のように、xtsobj["T09:00/T09:05"]のようなものを使用すると、最初の5分間の変更が始まってから動作しません。すなわち、午前9時20分または午前9時から午前中に何らかのランダムな時間に開始されることがあります。xts

これまでのところ、私はのような機能を使用して、各日の最初の分をサブセットすることができました:10000秒より大きいデータのギャップを見つけ、それからに行くすなわち

k <- diff(index(xtsobj))> 10000 

xtsobj[c(1, which(k)+1)] 

データが常に均等に間隔をあけているわけではないため、毎日の最初の5分間を見つけることはより困難です。私。

xtsobj[c(1, which(k)+6)] 

、次いで

は必ずしも正確ではない結果を一緒に結合する:第一分及び5分の間にのようなものを使用してこのように5行2列からのものとができました。私は、「first」のような関数を使うことができると期待していましたが、これを複数日に行う方法がわからず、おそらく最適な解決策かもしれません。この情報を入手するより良い方法はありますか?

あらかじめstackoverflowコミュニティに感謝します。

最初の出発点にあなたによると、ソートのランダムに変化毎日を見つける、そしてだから、ようなものになるだろう関数に minutes

を使用するかについて、あなたがパッケージlubridateを使用し、

答えて

4

split(xtsobj, "days")は毎日のXTSオブジェクトのリストを作成します。

その後、あなたは毎日

lapply(split(xtsobj, "days"), head, 5) 

以上の一般

lapply(split(xtsobj, "days"), function(x) { 
    x[1:5, ] 
}) 

最後に、あなたが戻って一緒にしたい場合は日をrbindできるにheadを適用することができます。

do.call(rbind, lapply(split(xtsobj, "days"), function(x) x[1:5, ])) 
+0

すごく感謝しています。それは完全に動作します! –

2

five_minutes_after = starting_point_each_day + minutes(5) 

5_min_period = paste(starting_point_each_day,five_minutes_after,sep='/') 

xtsobj[5_min_period] 

は、その後、あなたのような何かをやってxts通常のサブセットを使用することができます編集:

@Joshua 私はこれがうまくいくと思う、この例を見て:私の以前の例では

library(lubridate) 
x <- xts(cumsum(rnorm(20, 0, 0.1)), Sys.time() - seq(60,1200,60)) 

starting_point_each_day= index(x[1]) 
five_minutes_after = index(x[1]) + minutes(5) 
five_min_period = paste(starting_point_each_day,five_minutes_after,sep='/') 

x[five_min_period] 

を、私はミスを犯したが、私は引用符の間five_min_periodを置きます。 ジョシュアを指摘していたのですか?出発点は必要ありません。また、多分、ちょうど:

until5min=paste('/',five_minutes_after,sep="") 
x[until5min] 
+0

'xtsobj ['5_min_period']'は動作しません。非常に特定の種類の文字列を持つxtsオブジェクトのみをサブセット化することができます。 –

+0

@JoshuaUlrich私はそれが動作すると思うでしょう – aatrujillob

+0

'' 5_min_period''は文字列xtsが認識しないので 'xtsobj ['5_min_period']'は動作しません。あなたは間違いを訂正してうれしいです。 –