我有一个包含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)
我想转出items的store_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个分组变量.
还有其他建议吗?
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)