我有以下data.table:

> dt = data.table(sales_ccy = c("USD", "EUR", "GBP", "USD"), sales_amt = c(500,600,700,800), cost_ccy = c("GBP","USD","GBP","USD"), cost_amt = c(-100,-200,-300,-400))
> dt
   sales_ccy sales_amt cost_ccy cost_amt
1:       USD       500      GBP     -100
2:       EUR       600      USD     -200
3:       GBP       700      GBP     -300
4:       USD       800      USD     -400

我的目标是获取以下data.table:
> dt
   ccy total_amt
1: EUR       600
2: GBP       300
3: USD       700

基本上,我想按货币对所有成本和销售额求和。实际上,此data.table具有> 500,000行,因此我希望有一种快速有效的方式将金额总计在一起。

您知道实现此目的的快速方法吗?

最佳答案

使用data.table v1.9.6+(已改进了melt的版本),该版本可以同时融合到多个列中,

require(data.table) # v1.9.6+
melt(dt, measure = patterns("_ccy$", "_amt$")
    )[, .(tot_amt = sum(value2)), keyby = .(ccy=value1)]

关于r - R data.table按多列分组为1列和总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29845401/

10-12 20:19