【问题标题】:Add months of zero demand to zoo time series将几个月的零需求添加到动物园时间序列
【发布时间】:2015-11-13 07:31:38
【问题描述】:

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

【问题讨论】:

  • 请提供reproducible example,表示数据样本、您尝试的代码、预期输出以及任何错误消息。
  • 我试试看。

标签: r time-series zoo intermittent


【解决方案1】:

您可以使用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 函数的日期向量来做到这一点。在这种情况下,我们已经在上面创建了那个日期向量。

现在合并缺失日期的行。对于quantity,新行将具有NA。我们将在下面将这些 NAs 更改为零。

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

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

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

【讨论】:

  • 这很好用 eipi10,谢谢!我有类似的东西,但合并不起作用。我更改了命名配置,因此合并函数中的 by="dates" 与两个数据框匹配,现在我能够获取所有内容,转换为动物园系列,汇总为月度需求,并根据月度需求执行 Croston 方法.
  • 我很高兴它成功了,马特,虽然我认为@Henrik 的回答会更好,如果您使用的是zoo 对象。
【解决方案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(“将不规则序列扩展为规则序列”)。

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 2011-11-10
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2017-08-11
    • 2014-11-10
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多