r收集多变量时间序列

时间:2017-12-05 17:25:09

标签: r dataframe time-series hierarchical

我想要转换为时间序列的数据框。问题是我有多个产品的每个日期。它看起来像

    Name_Article Week Num_Any Spending Unit_Price
1      Product_A   1    2016   196.05     3.376000
2      Product_B   1    2016   377.04     1.004867
3      Product_A   2    2016  2979.40     3.376000
4      Product_C   2    2016   353.44     3.034444
5      Product_D   2    2016   160.99     0.653621
6      Product_E   2    2016   950.22     1.441164
7      Product_A   3    2016   196.05     3.376000
8      Product_B   3    2016   377.04     1.004867
9      Product_D   3    2016  2979.40     0.653621
10     Product_E   3    2016   353.44     1.441164
11     Product_A   4    2016   160.99     3.376000
12     Product_B   4    2016   950.22     1.441164

我知道使用每周时间序列不是最佳选择,但我别无选择。我的想法是得到像

这样的东西
  Week Spending.A UnitPrice.A Spending.B UnitPrice.B Spending.C UnitPrice.C ...
    1      196.05    3.376000     377.04    1.004867        0.00   3.034444
    2     2979.40    3.376000       0.00    1.004867      353.44   3.034444
    3      120.05    3.376000     377.04    1.004867        0.00   3.950000
    4      160.99    3.500000     950.22    1.441164    ...

我无法理解tydir函数gather()spread()。任何帮助将不胜感激!

如果您想知道,所有这一切的目标是预先形成分层预测,但在开始之前我需要构建数据。

非常感谢!

1 个答案:

答案 0 :(得分:0)

删除Name_Article中下划线的所有内容并删除年份列。然后将其作为动物园对象读取Name_Article,并指定Week是索引。

如果您需要特定表单,则可以进行各种转换,例如as.ts(z)fortify.zoo(z)coredata(z)index(z)zoo(coredata(z))

library(zoo)

DF2 <- transform(DF, Name_Article = sub(".*_", "", Name_Article))[-3]
z <- read.zoo(DF2, index = "Week", split = "Name_Article", FUN = identity)

,并提供:

> z
  Spending.A Unit_Price.A Spending.B Unit_Price.B Spending.C Unit_Price.C
1     196.05        3.376     377.04     1.004867         NA           NA
2    2979.40        3.376         NA           NA     353.44     3.034444
3     196.05        3.376     377.04     1.004867         NA           NA
4     160.99        3.376     950.22     1.441164         NA           NA
  Spending.D Unit_Price.D Spending.E Unit_Price.E
1         NA           NA         NA           NA
2     160.99     0.653621     950.22     1.441164
3    2979.40     0.653621     353.44     1.441164
4         NA           NA         NA           NA

注意

可重复形式的数据假定为:

Lines <- "
    Name_Article Week Num_Any Spending Unit_Price
1      Product_A   1    2016   196.05     3.376000
2      Product_B   1    2016   377.04     1.004867
3      Product_A   2    2016  2979.40     3.376000
4      Product_C   2    2016   353.44     3.034444
5      Product_D   2    2016   160.99     0.653621
6      Product_E   2    2016   950.22     1.441164
7      Product_A   3    2016   196.05     3.376000
8      Product_B   3    2016   377.04     1.004867
9      Product_D   3    2016  2979.40     0.653621
10     Product_E   3    2016   353.44     1.441164
11     Product_A   4    2016   160.99     3.376000
12     Product_B   4    2016   950.22     1.441164"
DF <- read.table(text = Lines, header = TRUE)