views:

133

answers:

2

Hello

I have a zoo time series with missing days. In order to fill it and have a continuous series I do...

I generate a chron date-time sequence from start to end.

I merge my series with this one.

I use na.locf to substitute NAs with las obsservation.

I remove the syntetic chron sequence.

Can I do same easier? Maybe with some index function related to the frequency?

A: 

It's slightly easier if you use a "empty" zoo object with an index.

> 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: For intra-day data (using Gabor's excellent xout= suggestion):

> index(x) <- as.POSIXct(index(x))
> na.locf(x, xout=seq(head(index(x),1),tail(index(x),1),by="15 min"))
Joshua Ulrich
How would it be if my time increment is 15min and chron ??thanks
Based on my brief look at `?seq.dates`, it doesn't look like you can create an intra-day `chron` sequence with `seq`. I would recommend using a different index class.
Joshua Ulrich
+1  A: 

This is covered in question 13 of the zoo FAQ http://cran.r-project.org/web/packages/zoo/vignettes/zoo-faq.pdf which uses the xout= argument of na.locf to eliminate the merge step. Be sure you are using zoo 1.6.4 or later since this feature was added recently.

G. Grothendieck