Добавьте месяцы нулевого спроса к временным рядам зоопарка
У меня есть некоторые прерывистые данные о спросе, которые включают только строки, в которых есть спрос. Я ввожу его через read.csv, и у меня есть два столбца: Дата (как дата) и Количество (как целое число). Затем я преобразовываю его в серию зоопарков и объединяю ежедневную потребность в ежемесячную. Мой окончательный вывод - серия зоопарков с датой первого дня месяца и суммированным спросом за этот месяц.
Моя проблема в том, что в этой серии зоопарков отсутствуют месяцы с нулевым спросом, и они нужны мне для правильного прогнозирования прерывистого спроса.
Например: у меня есть количество 2 на дату 2013-01-01, а затем следующая строка - это количество 3 на 2013-10-01. Мне нужно добавить ноль количества к 2013-02-01 по 2013-09-01.
Date <- c('1/1/2013','10/1/2013','11/1/2013')
Quantity <- c('2','3','6')
Date <- as.Date(Date, "%m/%d/%Y")
df <- data.frame(Date, Quantity)
df <- read.zoo(df)
df
Выход серии зоопарка:
2013-01-01 2013-10-01 2013-11-01
2 3 6
2 ответа
Потому что "DF" является zoo
объект, вы можете использовать merge.zoo
И его fill
аргумент. Текущий набор данных объединяется с пустым zoo
Объект, который содержит все желаемые даты.
tt <- seq(min(Date), max(Date), "month")
merge(df, zoo(, tt), fill = 0)
# 2013-01-01 2013-02-01 2013-03-01 2013-04-01 2013-05-01 2013-06-01 2013-07-01 2013-08-01 2013-09-01 2013-10-01 2013-11-01
# 2 0 0 0 0 0 0 0 0 3 6
Для дальнейших примеров см. ?merge.zoo
("расширить неправильный ряд до регулярного").
Ты можешь использовать merge
добавить недостающие строки, а затем установить их значения на ноль.
Во-первых, давайте создадим поддельные данные:
# Vector of dates from Jan 1, 2015, to Mar 31, 2015
dates = seq(as.Date("2015-01-01"), as.Date("2015-03-31"), by="1 day")
# Let's create data for few of these dates, leaving some out
set.seed(55)
dat = data.frame(dates=dates[sample(1:length(dates), 70)],
quantity=sample(1:10, 70, replace=TRUE))
dat = dat[order(dat$dates),]
Теперь давайте поверим dat
это то, что вы импортировали из CSV-файла. Мы хотим заполнить quantity
=0 для пропущенных дат. Итак, сначала нам нужно добавить строки для пропущенных дат. Вы можете сделать это, создав вектор дат, содержащий все даты от первой до последней даты в вашем CSV-файле и используя merge
функция. В этом случае мы уже создали этот вектор дат выше.
Теперь объедините строки для пропущенных дат. Новые строки будут иметь NA
за quantity
, Мы изменим те NA
с нуля ниже.
dat = merge(data.frame(dates), dat, by="dates", all.x=TRUE)
# Set missing values to zero
dat$quantity[is.na(dat$quantity)] = 0
Теперь вы можете агрегировать по месяцам, конвертировать в zoo
серия и т. д.