внутренний временной ряд NA, зоопарк, R - PullRequest
5 голосов
/ 14 марта 2012

У меня есть объект зоопарка в R, который имеет ежедневные данные и пропускает выходные. Когда я пытаюсь запустить некоторые функции (например, ar()) на объекте, я получаю сообщение об ошибке:

mkt.ar <- ar(zoo_object)
Error in na.fail.default(as.ts(x)) : missing values in object

Если я это сделаю:

mkt.ar <- ar(zoo_object, na.action=na.omit)
Error in na.omit.ts(as.ts(x)) : time series contains internal NAs

Это имеет смысл, поскольку, когда зоопарк пытается конвертировать вещи в ts, выходные по своей сути отсутствуют. Кроме преобразования вещей в вектор с использованием coredata(zoo_object) и запуска ar(), есть ли способ указать R пропустить пропущенные данные?

Спасибо

Ответы [ 2 ]

7 голосов
/ 14 марта 2012

Я понимаю, что каждый день представлен в ваших данных, включая будние и выходные дни, но дни, для которых нет данных, равны NA (в отличие от отсутствия вообще). В будущем, пожалуйста, предоставьте некоторые данные испытаний для большей ясности.

Помимо вашего решения, если у вас достаточно данных, вы можете выполнить ar для еженедельных данных только путем извлечения последнего не пропущенного значения в пятницу или до нее:

library(zoo)

# test data
library(chron) # is.weekend
z <- zoo(100:130, as.Date("2000-01-01") + 0:30)
z[is.weekend(time(z))] <- NA

# extract Fridays
zfri <- na.locf(z)[format(time(z), "%w") == 5]

(Если по пятницам нет пропущенных, его можно сократить, заменив na.locf(z) на z.)

Другая возможность - использовать 1, 2, ... для времен, но дать им имена, и в этом случае вы всегда можете узнать, к какой дате принадлежит точка, проверив имя ее времени.

z1 <- na.omit(z)
time(z1) <- setNames(seq_along(z1), time(z1))
0 голосов
/ 26 мая 2015

Простейшим методом будет преобразование объекта ZOO в объект data.frame путем например (z1 является объектом зоопарка):

dz1<-data.frame(na.omit(z1))

затем преобразуйте его в объект временного ряда.

ts(dz1, frequency=5)
...