计算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_vector
和l2_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"
假设我有两个这样的向量:
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_vector
和l2_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"