【问题标题】:calculate the repeatence of combinations elements in R计算R中组合元素的重复性
【发布时间】:2016-10-22 02:15:12
【问题描述】:

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

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(l1_vector, l2_vector)?
  • 乔塔,干得好!真是个好技巧,谢谢!

标签: r vector combinations


【解决方案1】:

虽然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" 

【讨论】:

    【解决方案2】:

    如 cmets 中所述,您可以为此使用 merge 函数。由于merge 的默认行为是使用所有的可用列,因此它将只返回那些完美匹配的行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2016-03-07
      • 2010-09-16
      • 2016-04-21
      • 2021-07-19
      • 2020-12-01
      • 2016-05-12
      相关资源
      最近更新 更多