вычисление пропущенных месяцев в временных рядах - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть набор данных в R, который содержит месячные значения. Тем не менее, некоторые месяцы отсутствуют. Например:

"2001-09-01" "2001-10-01" "2001-12-01" "2002-02-01"

Ноябрь 2001 отсутствует, а январь 2002 отсутствует. Как включить эти месяцы во временные ряды и добавить значение 0?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Поскольку это ежемесячный ряд, возможно, имеет смысл представить его в виде серии с "yearmon" разом. Первые несколько строк устанавливают тестовые данные, а последние две строки выполняют фактическое заполнение:

# set up input data as a zoo series
library(zoo)
d <- c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01")
z <- zoo(1:4, as.yearmon(d))

# merge with zero width series
g <- seq(start(z), end(z), 1/12)
zz <- merge(z, zoo(, g), fill = 0)

Если желательна серия "ts", тогда используйте as.ts(zz) или, если требуется серия зоопарка с временами класса "Date", попробуйте: time(zz) <- as.Date(time(zz)).

Обратите внимание, что это также обсуждается с несколькими примерами в FAQ 13 часто задаваемых вопросов о зоопарке, доступных через команду R vignette("zoo-faq") или в сети по адресу:

http://cran.r -project.org / веб / пакеты / зоопарк / виньетки / зоо-faq.pdf

2 голосов
/ 12 сентября 2011

Предполагая, что у вас есть данные в data.frame, называемом dat1:

dat1 <- data.frame(
  date = as.Date(c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01")),
  val  = 1:4
)

Затем вы можете создать второй data.frame, который содержит один столбец со всеми нужными вам датами.Используйте seq.Date для создания этой последовательности:

dat2 <- data.frame(
  date = seq(as.Date("2001-09-01"), by="1 month", length.out=7)
)

Тогда это простая merge операция:

merge(dat1, dat2, all=TRUE)
        date val
1 2001-09-01   1
2 2001-10-01   2
3 2001-11-01  NA
4 2001-12-01   3
5 2002-01-01  NA
6 2002-02-01   4
7 2002-03-01  NA

Пропущенные значения NA, но вы можете использовать подмножествоустановить их на 0, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...