在data.table条件中使用列索引

时间:2016-06-01 11:31:54

标签: r data.table

dt <- data.table(id=c(8,5,4,9,2,7), col1=c(2,1,2,2,3,1), col2=c(1,1,1,2,3,1))

   id col1 col2
1:  8    2    1
2:  5    1    1
3:  4    2    1
4:  9    2    2
5:  2    3    3
6:  7    1    1

我希望使用列索引而不是名称来对dt进行子集,以仅获取2col1中任何值包含值col2的行。

编辑:要明确,我对只知道列索引的情况感兴趣(名称未知)。

3 个答案:

答案 0 :(得分:2)

dt[rowSums(dt[,grep('col',names(dt)), with=F]==2)!=0,]
   id col1 col2
1:  8    2    1
2:  4    2    1
3:  9    2    2

使用列索引:

dt[rowSums(dt[,c(2,3), with=F]==2)!=0,]

答案 1 :(得分:2)

您可以使用.SD.SDcols

dt[dt[, Reduce("|", lapply(.SD, function(x) x==2)), .SDcols=2:3]]

答案 2 :(得分:0)

这有效

> dt <- data.table(id=c(8,5,4,9,2,7), col1=c(2,1,2,2,3,1), col2=c(1,1,1,2,3,1))
> dt[dt[[2]] == 2 | dt[[3]] == 2]
   id col1 col2
1:  8    2    1
2:  4    2    1
3:  9    2    2