2010-08-24 21 views
16

Ich habe eine Zoo-Zeitreihe mit fehlenden Tagen. Um es zu füllen und eine fortlaufende Serie zu haben, mache ich ...R: Fehlende Daten in einer Zeitreihe füllen?

Ich erzeuge eine chron Datum-Zeit-Sequenz von Anfang bis Ende.

Ich fusioniere meine Serie mit dieser.

Ich benutze na.locf, um NA durch Las-Observation zu ersetzen.

Ich entferne die syntetische Chronsequenz.

Kann ich das einfacher machen? Vielleicht mit einer Indexfunktion in Bezug auf die Frequenz?

Antwort

7

Es ist etwas einfacher, wenn Sie ein "leeres" zoo Objekt mit einem Index verwenden.

> x <- zoo(1:10,Sys.Date()-10:1)[c(1,3,5,7,10)] 
> empty <- zoo(order.by=seq.Date(head(index(x),1),tail(index(x),1),by="days")) 
> na.locf(merge(x,empty)) 
2010-08-14 2010-08-15 2010-08-16 2010-08-17 2010-08-18 
     1   1   3   3   5 
2010-08-19 2010-08-20 2010-08-21 2010-08-22 2010-08-23 
     5   7   7   7   10 

EDIT: Für Intra-Day-Daten (Gabor ausgezeichneten xout= Vorschlag verwenden):

> index(x) <- as.POSIXct(index(x)) 
> na.locf(x, xout=seq(head(index(x),1),tail(index(x),1),by="15 min")) 
+0

Wie wäre es, wenn mein Zeitschritt 15min und chron ?? danke – skan

+0

Basierend auf meinem kurzen Blick auf "Seq.dates", sieht es nicht so aus, als könnten Sie mit 'seq' eine Intra-Day' chron'-Sequenz erzeugen. Ich würde empfehlen, eine andere Indexklasse zu verwenden. –