你能告诉我如何将相交的数字相加并将它们除以较小的尺寸吗? (实际上,我有很多名单)。
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))
答案 0 :(得分:1)
combn
和apply
的组合可以解决问题:
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,......)来自哪里......但你可以从这里拿走它。或者如果你澄清你的问题,我可以编辑。