提供此示例,我想根据变量b
确定的长度计算变量a
中列表内的值的总和。
请考虑以下可重现的示例:
require(data.table)
dt <- data.table(a = 1:4)
dt[, b:= .(list(1:6))]
现在我要计算这样的事情:
dt[, c:= sum(b[[1]][1:a])]
当然,这会产生警告信息,结果与预期不同。
我也尝试使用apply
,但由于尝试了NA / NaN操作而返回错误:
dt[, c := apply(.SD, 1, function(x) sum(x[1][[1]][1:x[2]]))]
我的预期结果是:
> dt
a b c
1: 1 1,2,3,4,5,6 1
2: 2 1,2,3,4,5,6 3
3: 3 1,2,3,4,5,6 6
4: 4 1,2,3,4,5,6 10
我怎样才能做到这一点?
(对于好奇:我尽力提供一个可重复的例子。实际数据包括预测从仓库中交付的物品数量,该物品存储在列表变量中,以及补充所需的天数从第一天到第n天的预测总和(提前期)是供应过程需要再次开始的项目数 - 再订购点 - 。
######编辑添加#####
考虑以下情况:
dt <- data.table(a = c(1, 3, 3, 4), b = c(list(1:6), list(2:7), list(3:8), list(4:9)))
预期结果将是:
dt[, c]
# 1 9 12 22
答案 0 :(得分:2)
由于操作是行式的,我们可以使用mapply
而不是按行分组:
dtt[, newCol := mapply(function(x, y) sum(y[1:x]), a, b)]
我个人不会使用c
或dt
来表示变量或列名。