在数据表中创建列,具体取决于它的值

时间:2018-02-20 23:56:38

标签: r data.table data-manipulation shift

我在数据表中有单列

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]

2 个答案:

答案 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)

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