我在数据表中有单列
library(data.table)
DT <- data.table(con=c(1:5))
我的结果是一个新列x的数据表计算如下:第一个值应该是con的第一个值(这里:1),下一个(第二个)值应该通过muliplication第二个值计算第二个值x的第一个值。 x的第三个值是con的第三个值乘以x的第二个值的结果,依此类推。结果:
DT <- data.table(con=c(1:5), x = c(1,2,6,24,120))
我尝试过使用轮班,但是在我的代码的某些行下面没有帮助:
DT <- data.table(con=c(1:5))
DT[, x := shift(con,1, type = "lead")]
DT[, x := shift(x, 1)]
DT[, x := con * x]
答案 0 :(得分:3)
您正在寻找cumprod
DT[,x:=cumprod(con)]
DT
con x
1: 1 1
2: 2 2
3: 3 6
4: 4 24
5: 5 120
答案 1 :(得分:1)
我们可以使用purrr包中的accumulate
函数。
library(data.table)
library(purrr)
DT <- data.table(con=c(1:5))
DT[, x := accumulate(con, `*`)][]
# con x
# 1: 1 1
# 2: 2 2
# 3: 3 6
# 4: 4 24
# 5: 5 120
或来自基础R的Reduce
函数。
DT <- data.table(con=c(1:5))
DT[, x:= Reduce(`*`, con, accumulate = TRUE)][]
# con x
# 1: 1 1
# 2: 2 2
# 3: 3 6
# 4: 4 24
# 5: 5 120