【问题标题】:How to prepare month by month time series data in R from aggregated data containing part wise sales vs month?如何从包含部分明智销售与月份的聚合数据中准备 R 中的逐月时间序列数据?
【发布时间】:2021-03-01 04:45:09
【问题描述】:

我有一个数据框,其中包含许多部分的月销售数据: 例如

Partno 月份数量

第 1 部分 2019 年 6 月 20 日

第 1 部分 2019 年 7 月 25 日

第 1 部分 2019 年 9 月 30 日

第 2 部分 2019 年 3 月 45 日

第 3 部分 2019 年 8 月 40 日

第 3 部分 2019 年 11 月 21 日

我想把这些数据转换成逐月的时间序列,这样更容易进行时间序列预测,一旦我把它变成了一个ts对象

月 第 1 部分 第 2 部分 第 3 部分

1 月 0 日 0 0 日

2 月 0 日 0 日

3 月 0 日 45 日 0

四月 0 0 0

五月 0 0 0

6 月 20 日 0 0

7 月 25 日 0 0

8 月 0 日 0 日

9 月 0 日 30 日 0

10 月 0 日 0 月 20 日

11 月 0 日 0 月 21 日

十二月 0 0 0

我很困惑如何在 R 中实现这一点。任何解决方案都非常有用,因为我计划在 R 中构建一些预测模型。

期待大家的回音!

【问题讨论】:

  • 文字图片不太有用。请撤消您的上一次编辑,并按照之前编辑中有用的用户概述的适当格式的路径进行操作。
  • 有人可以帮我做这件事吗?我是堆栈溢出的新手。
  • 请阅读r标签顶部关于如何提问的说明。

标签: dataframe time-series data-science data-cleaning forecasting


【解决方案1】:

假设数据 DF 在末尾的注释中可重现地显示。

首先将DF 转换为zoo,将其按第一列拆分,然后将Month 列转换为yearmon 类。然后将其转换为 ts 类,将其扩展到 Jan 到 Dec,并将任何 NA 设置为 0。(如果您不需要开头和结尾的 0 个月,请省略 yrswindow 行。)

library(zoo)

z <- read.zoo(DF, split = 1, index = 2, FUN = as.yearmon, format = "%b %Y")
tt <- as.ts(z)
yrs <- as.integer(range(time(tt))) # start and end years
tt <- window(tt, start = yrs[1], end = yrs[2] + 11/12, extend = TRUE)
tt[is.na(tt)] <- 0
tt

给予:

         Part 1 Part 2 Part 3
Jan 2019      0      0      0
Feb 2019      0      0      0
Mar 2019      0     45      0
Apr 2019      0     20      0
May 2019      0      0      0
Jun 2019     20      0      0
Jul 2019     25      0      0
Aug 2019      0      0      0
Sep 2019     30      0      0
Oct 2019      0      0     20
Nov 2019      0      0     21
Dec 2019      0      0      0

注意

Lines <- "Partno, Month, Qty
Part 1, Jun 2019, 20
Part 1, Jul 2019, 25
Part 1, Sep 2019, 30
Part 2, Mar 2019, 45
Part 2, Apr 2019, 20
Part 3, Oct 2019, 20
Part 3, Nov 2019, 21"
DF <- read.csv(text = Lines, strip.white = TRUE)

【讨论】:

  • 就我而言,我已经有一个数据框,其数量为数字格式,月份为 as.yearmon 格式
  • 我的数据不全是文本- qty 是 double,partno 是整数,month 是字符。这些月份并不是唯一的——我们甚至可以将第 1 部分和第 2 部分都设置为 2019 年 4 月。我只是要求解释一个例子!
  • 答案的输入是 DF。线条只是为了我们可以定义它。您可以在两个不同的部分拥有相同的月份。但是,除非您向 read.zoo 添加一个 aggregate= 参数,否则您不能在同一部分有两次相同的月份。
  • 非常感谢-它现在可以工作了-我已经单独执行了聚合功能。我会记住 read.zoo 中的聚合争论部分,以便下次简化代码行。另外,我从您的代码中了解到 typeof(DF) 表明它是一个列表。我必须将我的数据框转换为相同的列表。我用数据框尝试了 read.zoo,但它不起作用。是否有直接读取数据帧和 csv 文件并执行 zoo 功能的替代方法 - 我想出了 read.csv.zoo() 但我遇到了一些错误 - 需要查看它
  • DF 是一个数据框。试试class(DF)。每个数据框也是一个列表,但在这里不相关。 read.zoo 可以读取文件或数据框。它不会读取不是数据框的列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2021-07-15
  • 2020-09-16
  • 2021-03-24
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多