根据它的值在数据表中创建列
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]
我们可以使用 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
您正在寻找cumprod
DT[,x:=cumprod(con)]
DT
con x
1: 1 1
2: 2 2
3: 3 6
4: 4 24
5: 5 120
我在数据中只有一列 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]
我们可以使用 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
您正在寻找cumprod
DT[,x:=cumprod(con)]
DT
con x
1: 1 1
2: 2 2
3: 3 6
4: 4 24
5: 5 120