根据它的值在数据表中创建列

create column in datatable depending on it's values

我在数据中只有一列 table

library(data.table)

DT <- data.table(con=c(1:5))

我的结果是一个数据 table 新列 x 计算如下:第一个值应该是 con(here:1) 的第一个值,下一个(第二个)值应该通过乘法计算第二个值con 乘以 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]

我们可以使用 包中的 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

您正在寻找cumprod

DT[,x:=cumprod(con)]
DT
   con   x
1:   1   1
2:   2   2
3:   3   6
4:   4  24
5:   5 120