将时间序列数据高效转换为R中hts包所需的结构
我有一个dputdata的经典形式的时间序列,在问题的末尾有30个输出将时间序列数据高效转换为R中hts包所需的结构,r,R,我有一个dputdata的经典形式的时间序列,在问题的末尾有30个输出 Region Country Channel Customer Family Product Pack Date Quantity A a 1 Z A a 1 2011-11-01 1000 ... A a 1 Z A a 1 20
Region Country Channel Customer Family Product Pack Date Quantity
A a 1 Z A a 1 2011-11-01 1000
...
A a 1 Z A a 1 2014-11-01 2000
A a 1 Z A a 2 2011-11-01 1000
...
A a 1 Z A a 2 2014-11-01 1000
A a 1 Z A b 1 2011-11-01 1000
...
A a 1 Z A b 2 2014-11-01 1000
...
...
D g 4 P D q 4 2011-11-01 1000
...
D g 4 P D q 4 2014-11-01 1000
我正在努力寻找一种有效的方法,将这些数据转换为gts/hts所需的结构,即
Date Aa1ZAa1 Aa1ZAa2 Aa1ZAa3 ... Aa1ZAb1 Aa1ZBa1 ... ... Dg4PDq4
2011-11-01 1000 1000 234 654 354345 1234
...
2014-11-01 2000 1000 345 3454 345443 334
我现在正在使用迭代,这显然是相当缓慢的
我还有一个问题,即并非所有系列的长度都相同,因为引入了一些新产品或现有产品已销售到新的国家/渠道
非常感谢大家的帮助
问候
特雷弗
如果df是数据集,您可以尝试
library(reshape2)
df1 <- data.frame(Multcol=as.character(interaction(df[,1:4]),sep=''),
df[,5:6], stringsAsFactors=FALSE)
res <- dcast(df1, Date~Multcol, value.var='Qty')
head(res,3)
# Date bci.SOP030.System.Gamer bci.SOP030.System.Server
#1 2013-03-01 735 0
#2 2013-04-01 0 0
#3 2013-05-01 0 0
请考虑使用DPT来显示数据。即,将dputheadyourdata的输出复制/粘贴到post@akrun-完成。请看更新的问题。我有疑问。在前面给出的示例中,列值只是一个字符,它们被粘贴在一起形成预期结果中的列名。但是,在dput中,每列都有单词。所以,通过将这些名称粘贴在一起作为列名,这不是很长的名称吗?你认为这是意料之中的结果吗?谢谢@ AkRun.我还在重塑包中找到了cast函数。@user1354798它也做了同样的事情。我想整形2是整形的高级版本
library(reshape2)
df1 <- data.frame(Multcol=as.character(interaction(df[,1:4]),sep=''),
df[,5:6], stringsAsFactors=FALSE)
res <- dcast(df1, Date~Multcol, value.var='Qty')
head(res,3)
# Date bci.SOP030.System.Gamer bci.SOP030.System.Server
#1 2013-03-01 735 0
#2 2013-04-01 0 0
#3 2013-05-01 0 0