R: Заполнение недостающих дат во временном ряду?

У меня есть временные ряды зоопарка с пропущенными днями. Чтобы заполнить его и получить непрерывный ряд, я делаю ...

Я генерирую хронологическую последовательность даты и времени от начала до конца.

Я объединяю свою серию с этой.

Я использую na.locf для замены NA на las obsservation.

Я удаляю синтетическую хроническую последовательность.

Могу я сделать то же самое попроще? Может быть, с какой-нибудь индексной функцией, связанной с частотой?


person skan    schedule 24.08.2010    source источник


Ответы (2)


Это немного проще, если вы используете «пустой» zoo объект с индексом.

> 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 

РЕДАКТИРОВАТЬ: для внутридневных данных (с использованием отличного предложения Габора xout=):

> index(x) <- as.POSIXct(index(x))
> na.locf(x, xout=seq(head(index(x),1),tail(index(x),1),by="15 min"))
person Joshua Ulrich    schedule 24.08.2010
comment
Как было бы, если бы мое приращение времени составляло 15 минут и хрон? Благодарность - person skan; 24.08.2010
comment
Основываясь на моем кратком обзоре ?seq.dates, не похоже, что вы можете создать внутридневную chron последовательность с seq. Я бы рекомендовал использовать другой индексный класс. - person Joshua Ulrich; 24.08.2010

Это описано в вопросе 13 часто задаваемых вопросов о зоопарке http://cran.r-project.org/web/packages/zoo/vignettes/zoo-faq.pdf, который использует аргумент xout = na.locf для исключения шага слияния. Убедитесь, что вы используете zoo 1.6.4 или новее, так как эта функция была добавлена ​​недавно.

person G. Grothendieck    schedule 24.08.2010