如何找到一个data.table含有我有一个data.table查询矢量

问题描述:

最匹配的行状如何找到一个data.table含有我有一个data.table查询矢量

library(data.table) 
ffDummy_dt = data.table(Annotation=c("chr10:10..20,-", "chr10:25..30,-" 
,"chr10:35..100,-","chr10:106..205,-","chr10:223..250,-","chr10:269..478,-" 
,"chr10:699..1001,-","chr10:2000..2210,-","chr10:2300..2500,-" 
,"chr10:2678..5678,-"),tpmOne=c(0,0,0.213,1,1.2,0.5,0.7,0.9,0.8,0.86), 
tpmTwo=c(100,1000,1001,1500,900,877,1212,1232,1312,0),tpmThree=c(0.2138595,0,0,0 
,0,0,0.6415786,0,0,0)) 

我想通过一个查询(可以是向量,甚至数据。表如果需要)如:

test_v = c(0,0,0.86) 

我想找出哪一行是最好的匹配。

在我的真实使用案例中,test_v类似于20个元素,而nrow(Dummy_dt)是>> 20(但可能每个20元素向量只有一个完美匹配)。

目前,

which.max(apply(as.matrix(ffDummy_dt[,2:ncol(ffDummy_dt),with=F]), 1, 
    function(k) sum(test_v%in%k))) 

似乎工作(给在这种情况下,这是10正确的输出),但是这不是一个data.table解决方案。

我看了一下here,但不能完全弄清楚如何在data.table上面使用%in% k

+0

所以你说的'test_v'中元素的顺序没有区别?如果是这样,那是一个混乱的问题。 – Frank

+0

这就是我要说的。 – Atticus29

+0

好吧,我猜你会遇到很多困难。首先,尝试使用'.1 + .2 == .3',然后阅读http://*.com/q/9508518/。如果您正在寻找整数或字符串或其他东西,这将是可行的。 – Frank

假设你真正想要的比赛是排他的(在我看来,更有意义的一排是“最佳匹配”),你可以这样做:

Reduce(`+`, lapply(ffDummy_dt, `%in%`, test_v)) 
#[1] 1 2 1 1 1 1 0 1 1 3