计算R中组合元素的重复

calculate the repeatence of combinations elements in R

假设我有两个这样的向量:

l1 = c('C','D','E','F')
l2 = c('G','C','D','F')

我使用 combn 函数生成两个元素的所有组合:

l1_vector = t(combn(l1,2))
l2_vector = t(combn(l2,2))

> l1_vector
     [,1] [,2]
[1,] "C"  "D" 
[2,] "C"  "E" 
[3,] "C"  "F" 
[4,] "D"  "E" 
[5,] "D"  "F" 
[6,] "E"  "F" 

> l2_vector
     [,1] [,2]
[1,] "G"  "C" 
[2,] "G"  "D" 
[3,] "G"  "F" 
[4,] "C"  "D" 
[5,] "C"  "F" 
[6,] "D"  "F" 

现在我要计算l1_vectorl2_vector的重复元素,如我举的例子,元素的重复应该是3个(["C","D"],["C","F"],["D","F"])

如何不使用循环来做到这一点?

如评论中所述,您可以为此使用 merge 函数。由于 merge 的默认行为是使用可用列的 all,因此它将 return 仅那些完全匹配的行。

> merge(l1_vector, l2_vector)
  V1 V2
1  C  D
2  C  F
3  D  F
> 
> nrow(merge(l1_vector, l2_vector))
[1] 3

虽然 merge 非常适合您的情况,但还有一些解决方法。

如果你只是需要重复元素的个数:

choose(length(intersect(l1, l2)), 2)
[1] 3

如果需要重复元素:

t(combn(intersect(l1, l2), 2))
     [,1] [,2]
[1,] "C"  "D" 
[2,] "C"  "F" 
[3,] "D"  "F"