2013-04-23 10 views
5

私は、次のXTS行列を持つ:ランダム時間観測から通常のxts期間を生成する方法は?

私は時系列エントリその期間の最後の値を運ぶ100ミリ秒ごとに生成する必要が
> options(digits.secs = 6) 
> set.seed(1234) 
> xts(1:10, as.POSIXlt(1366039619, tz="EST", origin="1970-01-01") + rnorm(10, 500000, 250000)/1000000) 
          [,1] 
2013-04-15 10:26:58.913576 4 
2013-04-15 10:26:59.198234 1 
2013-04-15 10:26:59.277491 10 
2013-04-15 10:26:59.356315 7 
2013-04-15 10:26:59.358887 9 
2013-04-15 10:26:59.363342 8 
2013-04-15 10:26:59.569357 2 
2013-04-15 10:26:59.607281 5 
2013-04-15 10:26:59.626514 6 
2013-04-15 10:26:59.771110 3 
Warning message: 
timezone of object (EST) is different than current timezone(). 

。例:最後のエントリは8を運ぶ方法

      [,1] 
2013-04-15 10:26:58.000000 4 
2013-04-15 10:26:59.100000 4 
2013-04-15 10:26:59.200000 1 
2013-04-15 10:26:59.300000 10 
2013-04-15 10:26:59.400000 8 
... 

注意、それは0.300000 0.399999までの期間の最後のエントリです。

+0

2番目のオブジェクトはどのように作成しましたか?あなたは 'rnorm'を呼び出す前に' set.seed'呼び出しを追加できますか?あなたの例は完全に再現可能ですか? –

+0

2番目のオブジェクト?私は、私が必要とする結果の単なる例ではありませんでした。最初のオブジェクトにset.seed()を追加します。 –

+0

1つ以上の期間に複数の観測があった場合はどうなりますか? –

答えて

6

これはWindowsで動作するかどうかわかりません.1秒未満の精度のサポートは貧弱ですが、これはUbuntuで動作します。

library(xts) 
options(digits.secs=6) 
set.seed(1234) 
x <- xts(1:10, as.POSIXlt(1366039619, tz="EST", origin="1970-01-01") 
    + rnorm(10, 500000, 250000)/1000000) 
ti <- trunc(index(x)) 
ms <- rep(seq(min(ti),max(ti),by="s"), each=10)+0:9/10 
a <- merge(x,ms,fill=na.locf)[ms] 

あなたは、あなたが不規則なデータからの定期的なXTSシリーズを作成する必要があり、他のインスタンスと同じに扱うことがわかります。サブ秒シーケンスを生成することは難しいため、少し難しくなります。

+1

いくつかのケースでは、マージされたセットに重複したインデックスエントリがあることに気付きました。私は同じ正確なインデックスが 'x'と' ms'(ミリ秒の精度と同じインデックス)の両方に現れると思います。この行は重複を取り除くでしょう: 'a = a [ - (これはc(index(a [-1])、NA)== index(a)))]]' –

+0

@ Robert-Kubrick私はちょうど同様の問題を解決しましたこれと同じ問題に遭遇しました - 重複しています。このコメントは重要です!注目してくれてありがとう... – FXQuantTrader

関連する問題