如何在折叠其他列时按唯一行值对列求和?
How to sum columns by unique row values while collapsing other columns?
我有一个数据集,其中包含在不同日期订购的单个商品的销售数字。特定订单中的所有项目共享相同的 ID。我想计算订单总计(即特定订单中所有商品的销售额总和),同时保留与每个订单关联的日期(我们可以假设订单的所有商品共享相同的日期)。如何在保留日期的同时根据 ID 对销售额求和?
这个问题与我见过的其他问题不同,因为我想在对不同的列 Sales 求和时保留和折叠 Date 列。
前面的列:Date
、ID
、Sales
之后的列:Date
、ID
、Order.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")
我有一个数据集,其中包含在不同日期订购的单个商品的销售数字。特定订单中的所有项目共享相同的 ID。我想计算订单总计(即特定订单中所有商品的销售额总和),同时保留与每个订单关联的日期(我们可以假设订单的所有商品共享相同的日期)。如何在保留日期的同时根据 ID 对销售额求和?
这个问题与我见过的其他问题不同,因为我想在对不同的列 Sales 求和时保留和折叠 Date 列。
前面的列:Date
、ID
、Sales
之后的列:Date
、ID
、Order.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
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")