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

时间:2019-07-01 23:11:32

标签: r sum aggregate lapply rowsum

我有一个数据集,其中包含在各个日期订购的各个项目的销售编号。特定顺序中的所有项目共享相同的ID。我想计算订单总计(即特定订单中所有商品的销售总和),同时保留与每个订单相关的日期(我们可以假设订单中的所有商品都具有相同的日期)。在保留日期的同时,如何在ID方面总结销售量?

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

之前的列:DateIDSales

后面的列:DateIDOrder.Total

以下代码返回错误,因为显然不能对日期求和:

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

1 个答案:

答案 0 :(得分:0)

我想你在追吗?

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)]

或者在基数R中使用aggregate

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")