可以使用数据表的滑动窗口函数(shift()
)来计算先前行值及总和,并应用查询(.SD
)操作将这些计算过程应用于数据表的每个组。然后,可以将这些计算过程应用于当前行值,从而计算总比率,并将其添加为新列。
以下是示例代码:
library(data.table)
# 创建示例数据表
dt <- data.table(ID = c(rep(1, 4), rep(2, 4)),
Value = c(10, 20, 30, 40, 5, 10, 15, 20))
# 按ID分组并添加滑动窗口列
dt[, c("PrevSum", "PrevCount") := .(shift(cumsum(Value), fill = 0),
shift(seq_along(Value), fill = 0)),
by = ID]
# 计算总比率并添加到数据表中
dt[, Ratio := sum(PrevSum)/sum(Value), by = ID]
dt
这将生成以下输出:
ID Value PrevSum PrevCount Ratio
1: 1 10 0 0 0.2222222
2: 1 20 10 1 0.2222222
3: 1 30 30 2 0.2222222
4: 1 40 60 3 0.2222222
5: 2 5 0 0 0.2941176
6: 2 10 5 1 0.2941176
7: 2 15 15 2 0.2941176
8: 2 20 30 3 0.2941176
其中PrevSum
和PrevCount
是基于先前行值的计算过
上一篇:按组在pandas中的前X%