我有一个data.table,其形状如下:
int bucket[20] = {0, }; // all values start at 0
for (int i = 0; i < 200000; ++i) { // you need 200000 random values
int j = random(0, 20); // produce a number between 0 and 19
bucket[j] = bucket[j] + 1; // increment the appropriate counter
}
所以,有三个订单包含一些商品。我想用一个data.table命令做的是添加一个订单的项目总数并在每一行中给出:
Order_ID Item Amount
1: a i1 1
2: a i2 2
3: a i3 3
4: b i1 2
5: b i3 1
6: c i2 3
7: c i3 4
我通过创建一个新的data.table与第一个合并它来到达那里。但我认为必须有一种更优雅的方式。 :)
感谢您的帮助!
答案 0 :(得分:7)
为了利用dt[, Total := sum(Amount), by=Order_ID]
# Order_ID Item Amount Total
# 1: a i1 1 6
# 2: a i2 2 6
# 3: a i3 3 6
# 4: b i1 2 3
# 5: b i3 1 3
# 6: c i2 3 7
# 7: c i3 4 7
的效率,它有助于使用类似的东西:
cx