使用多个分组变量创建数据框

时间:2015-10-01 19:11:29

标签: r

我有一个包含变量的表: OrderPostingYear,OrderPostingMonth,ProductsFamily,销售数量。现在我想创建一个数据框来显示一个表,每个ProductFamily(分组)都有行,每个OrderPostingYear& OrderPostingMonth(分组)都有列,值是Sales的总和。我该怎么做?

>ProductTable
 OrderPostingYear OrderPostingMonth ProductsFamily Sales QTY
2008               1                 R1            5234   1
2008               1                 R2            223    2
2009               1                 R3            34     1 
2008               2                 R1            1634   3
2010               4                 R3            224    1 

结果如下:

>PFTable
      2008-1 2008-2 2009-1 2010-4
R1     5234    1634    0     0
R2     223     0       0     0
R3     0       0       34    224

我想在dplyr中使用group_by和summarise_each但不是成功。请帮忙。谢谢!

PFTable<-data.frame(ProductTable%>%
                   group_by(ProductFamily) %>%                                summarise_each(.,funs(sum(SalesVolume,na.rm=TRUE)),group_by(OrderPostingYear,OrderPostingMonth)))

1 个答案:

答案 0 :(得分:1)

我们可以使用acast从'long'转换为'wide'格式。

library(reshape2)
acast(ProductTable, ProductsFamily~OrderPostingYear+OrderPostingMonth, 
             value.var='Sales', fill=0) 
#   2008_1 2008_2 2009_1 2010_4
#R1   5234   1634      0      0
#R2    223      0      0      0
#R3      0      0     34    224

如果我们想使用dplyr/tidyr,然后unite'OrderPostingYear'和'OrderPostingMonth',请移除'QTY'和spread以从'long'重新整形为'wide'

library(dplyr)
library(tidyr)
unite(df1, OrderMonth, OrderPostingYear, OrderPostingMonth, sep="-") %>%
               select(-QTY) %>%
               spread(OrderMonth, Sales)