【发布时间】:2022-01-21 09:24:00
【问题描述】:
我有一个 data.table x,它有 2 列 a、b。
我想计算一个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 计算现在正在进行中。 有什么解决办法吗?
感谢您的帮助 亚诺斯
【问题讨论】:
-
预期输出是什么?
c[i-1] < b[i]将永远是 NA 除非你有一个起始值...
标签: data.table