2013-04-23 5 views
5

Ich habe folgende XTS-Matrix:Wie generiere ich regelmäßige xts Perioden aus zufälligen Zeitbeobachtungen?

> 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(). 

Ich benötige Zeitreihe Einträge alle 100 Millisekunden trägt den letzten Wert für diesen Zeitraum zu erzeugen. Zum Beispiel:

      [,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 
... 

Beachten Sie, wie der letzte Eintrag 8 trägt, ist, dass der letzte Eintrag für den zu 0,399999 Zeitraum 0,300000.

+0

Wie haben Sie das zweite Objekt erstellt? Könnten Sie vor dem Aufruf von 'rnorm' einen Aufruf' set.seed' hinzufügen, damit Ihr Beispiel vollständig reproduzierbar ist? –

+0

Zweites Objekt? Ich habe es nicht getan, es ist nur ein Beispiel für das Ergebnis, das ich brauche. Ich werde set.seed() zum ersten Objekt hinzufügen. –

+0

Was wäre, wenn es mehrere Beobachtungen in einer oder mehreren Perioden gäbe? –

Antwort

6

Ich bin nicht sicher, ob dies unter Windows funktioniert, da die Unterstützung für Sub-Sekunden-Genauigkeit ist schlecht, aber das funktioniert auf 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] 

Sie werden feststellen, dass Sie diese die wie jede andere Instanz derselben behandeln, in denen Sie eine regelmäßige xts Reihe von unregelmäßigen Daten erstellen müssen. Es ist jedoch ein bisschen schwieriger, da es schwieriger ist, eine Subsekundensequenz zu erzeugen.

+1

Ich habe in einigen Fällen doppelte Indexeinträge im zusammengeführten Satz festgestellt. Ich denke, das ist, wenn derselbe exakte Index sowohl in "x" als auch in "ms" (gleicher Index zu Millisekunden-Genauigkeit) erscheint. Diese Zeile würde die Duplikate löschen: 'a = a [- (was (c (Index (a [-1]), NA) == Index (a)))]' –

+0

@ Robert-Kubrick Ich habe gerade ein ähnliches Problem gelöst dazu, und stieß auf das gleiche Problem wie das - Duplikate. Dieser Kommentar ist wichtig! Danke für's Bemerken ... – FXQuantTrader