我在R中有一个data.table,如下所示:
> head(t)
ITEM COUNTRY YEAR MONTH QUANTITY
1: 1 1 2014 1 2
2: 1 2 2014 1 133
3: 2 3 2014 1 2
4: 3 4 2014 1 20
5: 3 2 2014 1 142
6: 4 4 2014 1 5
对于其他年/月,ITEM-COUNTRY也有相同的组合数据;我有2014年1月至2015年12月的数据,所以24个月 . 可能并非所有项目/国家都拥有所有积分的数据,即有些只有19个月等 .
我知道如何在整个期间汇总数量:
agg = t[,list("TOT Q"=sum(QUANTITY)),by='ITEM,COUNTRY']
但是,现在我想要这样的东西:
项目 - 国家 - 问题1-2014 - 问题2-2014 - .... - 问题12-2015
如果没有特定项目/国家/地区的数据,则Q应该为零,否则它应该是年份和月份的相应行中的数据 . 即我想汇总项目和国家/地区,但是,保留所有数量并将它们放在不同的列中 .
编辑:
尝试了Jaap的评论,它首先不起作用 . 但我解决了它 . 我得到0和1作为输出和一个错过聚合函数的警告 . 搜索此警告我发现stackoverflow.com/questions/30463591 / ...解决了我的问题 . 正如我所说,我有更多变量,所以对于某些项目/国家/月/年组合我有重复,因为它们在其他变量上不同,所以我需要一个聚合函数(总和) .
我现在用的是:
dcast(t, ITEM + COUNTRY ~ MONTH + YEAR, value.var="QUANTITY", fun.aggregate=sum)
1 回答
尝试了Jaap的评论,它首先不起作用 . 但我解决了它 . 我得到0和1作为输出和一个错过聚合函数的警告 . 搜索此警告我发现stackoverflow.com/questions/30463591 / ...解决了我的问题 . 正如我所说,我有更多变量,所以对于某些项目/国家/月/年组合我有重复,因为它们在其他变量上不同,所以我需要一个聚合函数(总和) .
我现在用的是: