2013-04-23 14 views
5

Ho la seguente matrice xts:Come generare periodi xts regolari da osservazioni a tempo casuale?

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

devo generare voci temporali ogni 100 millisecondi trasportano l'ultimo valore per quel periodo. Per esempio:

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

Si noti come l'ultima voce porta 8, che è l'ultima voce per il periodo ,300000-,399999.

+0

Come hai creato il secondo oggetto? Potresti aggiungere una chiamata 'set.seed' prima di chiamare' rnorm', quindi il tuo esempio è completamente riproducibile? –

+0

Secondo oggetto? Non l'ho fatto, è solo un esempio del risultato di cui ho bisogno. Ho intenzione di aggiungere set.seed() al primo oggetto. –

+0

Cosa accadrebbe se ci fossero più osservazioni in uno o più periodi? –

risposta

6

Non sono sicuro che funzioni su Windows, dal momento che il supporto per la precisione al secondo inferiore è scadente, ma questo funziona su 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] 

Si noterà che si gestisce questo la stessa di qualsiasi altro caso in cui è necessario creare una serie regolare XTS dai dati irregolari. È un po 'più difficile, dal momento che è più difficile generare una sequenza secondaria al secondo.

+1

Ho notato voci di indice duplicate nel set unito in alcuni casi. Penso che sia quando lo stesso indice esatto appare sia in 'x' che in' ms' (stesso indice con precisione millisecondo). Questa riga cancellerebbe i duplicati: 'a = a [- (che (c (indice (a [-1]), NA) == indice (a)))] –

+0

@ Robert-Kubrick Ho appena risolto un problema simile a questo, e si è imbattuto nello stesso problema di questo: duplicati. Questo commento è importante! Grazie per aver notato ... – FXQuantTrader

Problemi correlati