我有一个包含变量的表: 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)))
答案 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)