如果给定以下数据表,并且我们想要依次将 x1 与 x2 到 x5 进行比较,则可以使用以下方法:
set.seed(1)
library(data.table)
TDT <- data.table(x1 = round(rnorm(100,0.75,0.3),2),
x2 = round(rnorm(100,0.75,0.3),2),
x3 = round(rnorm(100,0.75,0.3),2),
x4 = round(rnorm(100,0.75,0.3),2),
x5 = round(rnorm(100,0.75,0.3),2))
TDT[,compare := ifelse(x1 < x2,1,ifelse(x1 < x3,2,ifelse(x1 < x4,3,ifelse(x1 < x5,4,5))))]
因此,如果x1 < x2
,则compare == 1
,以此类推。
现在在我的例子中,我有很多列需要与x1进行比较。是否有更简洁的方法来写这个,即不使用嵌套的ifelse?
max.col(TDT$x1 < cbind(TDT[, -1, with=F], Inf), "first")
- user20650TDT[, compare := max.col(x1 < data.table(.SD, Inf), "first"), .SDcols = x2:x5]
。我尝试使用c(.SD, Inf)
,但不知何故它返回错误。 - akrun