R 使用多个分组变量创建数据帧
我有一个包含变量的表: 订单发布年份、订单发布月份、产品系列、销售、数量。现在我想创建一个数据框来显示一个表,其中行作为每个ProductFamily(分组),列作为每个OrderPostingYear&OrderPostingMonth(分组),值是销售额的总和。我该怎么做R 使用多个分组变量创建数据帧,r,R,我有一个包含变量的表: 订单发布年份、订单发布月份、产品系列、销售、数量。现在我想创建一个数据框来显示一个表,其中行作为每个ProductFamily(分组),列作为每个OrderPostingYear&OrderPostingMonth(分组),值是销售额的总和。我该怎么做 >ProductTable OrderPostingYear OrderPostingMonth ProductsFamily Sales QTY 2008 1
>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
我正在考虑使用group_by,并在dplyr中对每个人进行总结,但不是成功。我需要帮助。谢谢大家!
PFTable<-data.frame(ProductTable%>%
group_by(ProductFamily) %>% summarise_each(.,funs(sum(SalesVolume,na.rm=TRUE)),group_by(OrderPostingYear,OrderPostingMonth)))
PFTable%
分组依据(ProductFamily)%>%总结每个(,funs(总和(销售额,na.rm=TRUE)),分组依据(OrderPostingYear,OrderPostingMonth)))
我们可以使用acast
将“长”格式改为“宽”格式
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)
非常感谢。但是我想通过“ProductFamily”和“OrderPostingYear&OrderPostingMonth”来创建值为SUM的表。不仅仅是删除数量。@HersheyY我的解决方案是基于您显示的预期输出。如果您需要
sum
,则在acast/dcast
中有fun.aggregate指定sum
,即acast(ProductTable,ProductsFamily~OrderPostingYear+OrderPostingMonth,value.var='Sales',fill=0,sum)