为动物园时间序列增加零个月的需求

时间:2015-08-19 20:24:28

标签: r time-series zoo intermittent

我有一些间歇性需求数据,只包含需求存在的行。我通过read.csv把它带进来,我的2列是Date(作为日期)和Quantity(作为整数)。然后我将它转换为动物园系列,并将每日需求与月需求结合起来。我的最终输出是一个动物园系列,日期是该月的第一天和该月的总需求。

我的问题是这个动物园系列在缺少需求零的月份之间缺少,我需要这些来正确预测间歇性需求。

例如:我在2013-01-01日期有数量2,然后下一行是2013-10-01中的数量3。我需要将数量零添加到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 个答案:

答案 0 :(得分:6)

因为“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(“将不规则系列扩展为常规系列”)。

答案 1 :(得分:0)

您可以使用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 s更改为零以下。

dat = merge(data.frame(dates), dat, by="dates", all.x=TRUE)

# Set missing values to zero
dat$quantity[is.na(dat$quantity)] = 0

现在您可以按月汇总,转换为zoo系列等等。