data.table 行值取决于 R 中的先前值

data.table row value depend on previous value in R

我有一个 data.table x,它有 2 列 ab
我想计算一个 c 列。

library(data.table)

x = data.table(a = c(1:5), b = c(1,0,2,3,6), c = NA)
x$a[1] = NA
x$b[1] = NA

x
#>        a     b      c
#>    <int> <num> <lgcl>
#> 1:    NA    NA     NA
#> 2:     2     0     NA
#> 3:     3     2     NA
#> 4:     4     3     NA
#> 5:     5     6     NA

算法是:

 c[i] = ifelse(a[i] < b[i] & c[i-1] < b[i], a[i], b[i])

我不想使用 for 循环,因为它太慢了。 我想使用 data.table 函数,或者像这样的快速方法:

x$c = fifelse(x$a < x$b & lag(x$c) < x$b, x$a, x$b)

但它不起作用,因为 x$c 计算正在进行中。 有什么解决办法吗?

感谢帮助 亚诺斯

您可以使用 Reduceaccumulate=T 选项:

library(data.table)

x = data.table(a = c(1:5), b = c(1,0,2,3,6), c = NA)
x$a[1] = NA
x$b[1] = NA

x[,c:=Reduce(f = function(prev,val) ifelse((val$a < val$b & prev<val$b),val$a,val$b), 
             x = split(.SD[-1],seq_len(.N-1)), init = NA
             ,accumulate = T)][]

#>        a     b     c
#>    <int> <num> <num>
#> 1:    NA    NA    NA
#> 2:     2     0     0
#> 3:     3     2     2
#> 4:     4     3     3
#> 5:     5     6     5

Reduce通过上一行计算的结果来计算下一行。 accumulate=T returns 中间结果而不仅仅是最后一行。