4

我有一些间歇性需求数据,其中仅包括存在需求的行。我通过 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
4

2 回答 2

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

于 2015-08-19T22:10:44.910 回答
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函数的日期向量来做到这一点。在这种情况下,我们已经在上面创建了那个日期向量。

现在合并缺失日期的行。新行将具有NAfor 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系列等。

于 2015-08-19T21:46:37.067 回答