透视使用多列

scr*_*Owl 2 aggregate r

我有一个包含5列的数据集:

store_id    year    event    item    units
123         2015     sale_2   abc      2
234         2015     sale_3   def      1
345         2015     sale_2   xyz      5
Run Code Online (Sandbox Code Playgroud)

我想转出itemsstore_id, year, and event获得sum.例如

store_id    year    event    abc     def   xyz 
123          2015    sale_2   7       0     0
234          2015    sale_2   2       1     0
Run Code Online (Sandbox Code Playgroud)

我无法找出最好的方法.通常我会在插入符号中使用dummyVars来执行此操作,但我需要总和而不是标记.我看了tapply但它不能处理超过2个分组变量.

还有其他建议吗?

C8H*_*4O2 5

library(reshape2)
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units')
#    store_id year  event abc def xyz
# 1:      123 2015 sale_2   2   0   0
# 2:      234 2015 sale_3   0   1   0
# 3:      345 2015 sale_2   0   0   5
Run Code Online (Sandbox Code Playgroud)

对于大型数据集,请考虑

# uses dcast.data.table, much faster
library(data.table)
setDT(df)
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units') 
Run Code Online (Sandbox Code Playgroud)