我在R中有一个非常大的数据框,并且想要为其他列中每个不同值的两列进行求和,例如我们有一天中各个商店中的交易数据帧的数据如下R中不同列值的总和
shop <- data.frame('shop_id' = c(1, 1, 1, 2, 3, 3),
'shop_name' = c('Shop A', 'Shop A', 'Shop A', 'Shop B', 'Shop C', 'Shop C'),
'city' = c('London', 'London', 'London', 'Cardiff', 'Dublin', 'Dublin'),
'sale' = c(12, 5, 9, 15, 10, 18),
'profit' = c(3, 1, 3, 6, 5, 9))
是:
shop_id shop_name city sale profit
1 Shop A London 12 3
1 Shop A London 5 1
1 Shop A London 9 3
2 Shop B Cardiff 15 6
3 Shop C Dublin 10 5
3 Shop C Dublin 18 9
而且我要总结每个店铺的销售和利润给:
shop_id shop_name city sale profit
1 Shop A London 26 7
2 Shop B Cardiff 15 6
3 Shop C Dublin 28 14
我目前使用下面的代码来做到这一点:
shop_day <-ddply(shop, "shop_id", transform, sale=sum(sale), profit=sum(profit))
shop_day <- subset(shop_day, !duplicated(shop_id))
这工作绝对没问题,但我说我的数据框大(140,000行,37列和近10万的唯一行,我想总结)而且我的代码需要很长时间才能运行,然后最终表明它的内存不足。
有谁知道最有效的方法来做到这一点。
在此先感谢!
......我觉得'data.table'的答案来了...... – 2012-08-02 16:42:40