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
进行子集,以仅获取2
或col1
中任何值包含值col2
的行。
编辑:要明确,我对只知道列索引的情况感兴趣(名称未知)。
答案 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