我有一些间歇性需求数据,只包含需求存在的行。我通过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
答案 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
系列等等。