我想要转换为时间序列的数据框。问题是我有多个产品的每个日期。它看起来像
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()
。任何帮助将不胜感激!
如果您想知道,所有这一切的目标是预先形成分层预测,但在开始之前我需要构建数据。
非常感谢!
答案 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)