将时间序列数据高效转换为R中hts包所需的结构

将时间序列数据高效转换为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

我有一个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    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