【发布时间】:2017-03-27 11:25:15
【问题描述】:
如果给出以下数据表,我们想将 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?
【问题讨论】:
-
在你的例子中,它给出的都是 FALSE,请提供一个给出所有可能性的例子
-
max.col(TDT$x1 < cbind(TDT[, -1, with=F], Inf), "first") -
@user20650 这是一个聪明的选择。我喜欢它
-
@user20650 我认为它可以更改为
TDT[, compare := max.col(x1 < data.table(.SD, Inf), "first"), .SDcols = x2:x5]我正在尝试使用c(.SD, Inf)但不知何故它返回错误 -
好东西@Akrun,看起来有点像
标签: r if-statement data.table