匹配R中列表中的元素

时间:2016-04-17 12:24:22

标签: r

我有一个列表,其中有10个元素。我正在显示我列表中的第8,9和10个元素。

 > a[8]
 [[1]]
 [1] BUFMARINE   COLDEPS      M1RED     ORGM1T3   JELLYBIN  
 [6] MULTITASK    PBA       UVRAYS     UVBRO        

 > a[9]
 [[1]]
 [1] PBA         MULTITASK      M1RED     ARITHRO   ORGM1T3  
 [6] BACKUP      BUFMARINE      FIRELANE  PRITH     SOLTS
 [11]REDMOS

 > a[10]
 [[1]]
 [1] PRITH       M1RED          BUFMARINE     ORGM1T3   OLAX     
 [6] PBA         FIRELANE       ANADS         ZEPRO     BLUEPACK
 [11]SOLTS       ARACUS         SOLVIN        SUES   

如您所见,列表中每个元素中的元素数量不同。 在[8]和[9]中,我们可以看到有5个匹配的字符串,即BUFMARINE,M1RED,ORGM1T3,MULTITASK和PBA。 a [8]和[9]中的总字符串是9 + 11 = 20。因此,我们可以说a [8]匹配[9]乘以(5 * 2 * 100)/ 20 = 50% 这样我想匹配所有组合并找到哪两组列表元素具有更大的字符串匹配百分比。字符串在每个列表中的顺序对我来说并不重要,因此当采用两个列表项(ex [2]和[4])的组合时,我想将a [2]的每个字符串与每个a [4]的字符串,看看我们是否匹配。

1 个答案:

答案 0 :(得分:0)

这样的东西
set.seed(3)
( lst <- replicate(3, sample(letters[1:5], sample(1:5, 1), F)) )
# [[1]]
# [1] "e"
# 
# [[2]]
# [1] "b" "c"
# 
# [[3]]
# [1] "a" "b" "d" "c"
( combis <- combn(seq(lst), 2) )
#      [,1] [,2] [,3]
# [1,]    1    1    2
# [2,]    2    3    3
apply(combis, 2, function(x) {
  length(intersect(lst[[x[1]]], lst[[x[2]]])) / ( length(lst[[x[1]]])+length(lst[[x[2]]]) )*100
})
# [1]  0.00000  0.00000 33.33333