R_如何从成对比较中找到共同元素并进行计算

时间:2014-06-26 20:27:45

标签: r

你能告诉我如何将相交的数字相加并将它们除以较小的尺寸吗? (实际上,我有很多名单)。

foo = list (X=c("a","b","c"),Y=c("a","d","e","f"),Z=c("a","b","z","f","e"),ZZ=c("b","z","e","c"))

从这里开始,

我想首先计算所有成对公共元素的总数,然后将该值除以较小值的大小,

那是 3.4166

3.4166 = 1/3(交叉(X,Y)/ min(X,Y))+ 2/3(交叉(X,Z)/ min(X, Z))+ 2/3(交叉(X,ZZ)/ min(X,ZZ)+ 3/4(交叉(Y,Z)/ min(Y,Z))+ 1/4(交叉(Y,ZZ) )/ min(Y,ZZ)+ 3/4(交叉(Z,ZZ)/ min(Y,ZZ))

1 个答案:

答案 0 :(得分:1)

combnapply的组合可以解决问题:

sum(apply(combn(seq_along(foo),2),2,function(xx){
  length(intersect(foo[[xx[1]]],foo[[xx[2]]]))/
    min(c(length(foo[[xx[1]]]),length(foo[[xx[2]]])))
}))

至少这会给你带来的结果。我有点不清楚系数(1 / 3,2 / 3,......)来自哪里......但你可以从这里拿走它。或者如果你澄清你的问题,我可以编辑。