如何在折叠其他列时按唯一行值对列求和?

How to sum columns by unique row values while collapsing other columns?

我有一个数据集,其中包含在不同日期订购的单个商品的销售数字。特定订单中的所有项目共享相同的 ID。我想计算订单总计(即特定订单中所有商品的销售额总和),同时保留与每个订单关联的日期(我们可以假设订单的所有商品共享相同的日期)。如何在保留日期的同时根据 ID 对销售额求和?

这个问题与我见过的其他问题不同,因为我想在对不同的列 Sales 求和时保留和折叠 Date 列。

前面的列:DateIDSales

之后的列:DateIDOrder.Total

下面的代码returns一个错误,因为日期显然不能相加:

df[, lapply(.SD, sum), by = "ID"]

以下代码完全删除了日期字段:

df[, lapply(.SD, sum), by = "ID", .SDcols = !"Date"]

比如我之前的数据集是:

DATE  ID  SALES
1/2   01    1 
1/2   01    2
1/2   02    3
1/3   03    6
1/4   04    5
1/4   04    4

我之后的数据集应该是:

DATE  ID  ORDER.TOTAL
1/2   01    3 
1/2   02    3
1/3   03    6
1/4   04    9

我猜你在找这个?

dt[, .(ORDER.TOTAL = sum(SALES)), by =.(DATE, ID)]
#    DATE ID ORDER.TOTAL
#1:  1/2  1           3
#2:  1/2  2           3
#3:  1/3  3           6
#4:  1/4  4           9

相同
dt[, list(ORDER.TOTAL = sum(SALES)), by = list(DATE, ID)]

或使用 aggregate

在 base R 中相同
aggregate(SALES ~ DATE + ID, data = as.data.frame(dt), FUN = sum)
#  DATE ID SALES
#1  1/2  1     3
#2  1/2  2     3
#3  1/3  3     6
#4  1/4  4     9

示例数据

library(data.table)
dt <- fread("DATE  ID  SALES
1/2   01    1
1/2   01    2
1/2   02    3
1/3   03    6
1/4   04    5
1/4   04    4")