【发布时间】:2018-02-09 13:03:32
【问题描述】:
情况:我有一个包含交易的数据集 (transData)。每笔交易都有其对应的行,其中包含相关的列:transactionID、customerID、Date 和 moneySpend。
简化示例:
1; 101; 1/1/18; 42
2; 101; 1/1/18; 13
3; 102; 1/1/18; 32
4; 103; 1/1/18; 56
5; 103; 1/1/18; 85
6; 103; 2/1/18; 8
7; 101; 2/1/18; 23
8; 103; 2/1/18; 14
9; 103; 2/1/18; 35
10; 104; 2/1/18; 48
我需要什么:一个客户每天可以购买多件商品,但是每件商品在交易数据集中都有自己的行。但是,我需要将这些交易合并为一个,其中 moneySpend 是各个项目的总和。
简化示例:
1; 101; 1/1/18; 55
2; 102; 1/1/18; 32
3; 103; 1/1/18; 141
4; 103; 2/1/18; 77
5; 101; 2/1/18; 23
6; 104; 2/1/18; 48
(注意:transactionID 不重要,只要是唯一的即可。)
我做了什么:使用 plyr 包中的 ddply 创建一个表格,整理出 customerId 和 day 的唯一组合:
newTable <- ddply(transData, .(transData$customerID, transData$Date), nrow)
接下来我在for循环中总结事务:
for (i in 1:dim(newTable)[1]){
trans = which(transData$customerID==newTable[i,1] & transData$Date==newTable[i,2])
totalSpend[i]=sum(transData[trans,32:35])
}
问题:这对于需要处理的交易量来说太慢了。
有没有办法更有效地做到这一点(方式)?
【问题讨论】:
-
为了帮助我们帮助您,请提供可重现的示例。并使用
microbenchmarkpackage 计算您的时间。你也应该尝试矢量化你的 for 循环 -
您可以使用
dput提供可重现的示例 -
所以您想通过 custumer_id 汇总您的资金支出?检查这个stackoverflow.com/questions/1660124/…
标签: r database transactions bigdata coding-efficiency