让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
?
答案 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)