You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对data.table分组列内的值求乘积并返回结果行?

data.table分组求列值乘积的正确方法

你不需要用cumprod来计算分组乘积,直接用prod函数就能一步得到每组的总乘积,完全不用处理多余的行:

原始输入

dt = data.table(group = c(1,1,2,2), value = c(2,3,4,5))

正确实现代码

dt[, .(value = prod(value)), by = group]

输出结果

group value
1:     1     6
2:     2    20

为什么之前的方法有问题?

cumprod是计算累积乘积,会保留组内每一行的累积结果,所以才会出现多余的行。而prod直接计算组内所有值的总乘积,返回每组一行的结果,正好符合你的需求。

如果非要基于cumprod的结果处理(不推荐,多此一举),可以取每组的最后一行(因为累积乘积的最后一个值就是总乘积),代码如下:

dt[, new_value := cumprod(value), by = group][, .SD[.N], by = group][, c("new_value") := NULL]

内容的提问来源于stack exchange,提问作者Tessa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:42:46