data.table中的多列条件

时间:2015-03-30 01:34:11

标签: r data.table

DT成为data.table:

DT <- data.table (col.1 = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
                  col.2 = c(0, 1, 1, 0, 0, 0, 1, 0, 1, 1),
                  #...
                  col.n = c(0, 2, 1, 0, 0, 2, 1, 0, 0, 1),                
                  flag  = 0)

DT
    col.1 col.2 col.n flag
 1:     1     0     0    0
 2:     1     1     2    0
 3:     1     1     1    0
 4:     2     0     0    0
 5:     2     0     0    0
 6:     2     0     2    0
 7:     3     1     1    0
 8:     3     0     0    0
 9:     3     1     0    0
10:     3     1     1    0

如何在不使用列名的情况下将flag = T(或1)设置为col.1 + col.2 + col.n > 4

2 个答案:

答案 0 :(得分:1)

另一种选择是使用Reduce

DT[, flag := (Reduce(`+`, .SD)>4)+0L, .SDcols=-'flag'][]

答案 1 :(得分:0)

DT$flag<-ifelse(rowSums(DT[,1:ncol(DT[,.SDcols=-"flag"]),with=FALSE])>4,1,DT$flag)