具有多个条件的ifelse,用于在data.table中创建新变量

jan*_*nyi 6 if-statement r data.table

我有一个data.table并且想要在一个ifelse语句中基于多个条件创建一个新变量但是我得到的结果似乎很奇怪.

让我们想象下面的简化示例.

DT <- data.table(replicate(2,sample(0:1,5,replace=TRUE)))

   V1 V2
1:  1  0
2:  1  1
3:  1  1
4:  1  0
5:  0  1
Run Code Online (Sandbox Code Playgroud)

我想基于现有变量创建一个新变量.我使用ifelse如下声明:

DT[, new.var := ifelse(V1 > 0, 1, 0)]
DT[, new.var.mult := ifelse(V1 > 0 && V2 > 0, 1, 0)]
Run Code Online (Sandbox Code Playgroud)

但是,这在多个条件的情况下不起作用.(我知道这个任务可以在没有多重条件的情况下轻松解决,但我的问题更复杂.)

   V1 V2 new_var new_var_multiple
1:  1  0       1                0
2:  1  1       1                0
3:  1  1       1                0
4:  1  0       1                0
5:  0  1       0                0
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?

Mar*_*ing 5

您只需使用一个&符号来比较矢量.

DT[, new.var.mult := ifelse(V1 > 0 & V2 > 0, 1, 0)]
Run Code Online (Sandbox Code Playgroud)

插图:

> c(TRUE, TRUE) & c(FALSE, TRUE)
[1] FALSE  TRUE
> c(TRUE, TRUE) && c(FALSE, TRUE)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

  • 避免在data.tables中使用`ifelse`.我不认为它是优化的(但是?).我只是做一些像`DT [,x:="a"]; DT [condition,x:="b"]`如果David的评论不适用. (7认同)