【问题标题】:how can i create a combinations of element with at most x repetitions for each one我如何创建一个元素组合,每个元素最多重复 x 次
【发布时间】:2018-11-04 16:18:31
【问题描述】:

我将生成一个包含 5 个元素的向量 x 的组合,每个元素最多重复 2 次。

x = c(1,2,3,4,5,6,7,8,9,10)  

我正在使用combn(x,5),但返回 5 个元素的组合而不重复。

在输出中我会这样:((1,2,3,4,5), (1,2,3,4,6), ..., (1,1,3,4,5) ,(1,2,3,4,4), (1,1,2,2,3), ...)

最重要的是每个元素最多表示两次。我想知道是否有一个功能可以做到这一点。

【问题讨论】:

  • 请提供您提到的x 和预期输出。
  • 我有向量 x =c(1,2,3,4,5,6,7,8,9,10),在输出中我会像 : ((1,2,3 ,4,5),(1,2,3,4,6)....(1,1,3,4,5),(1,2,3,4,4),(1,1, 2,2,3)....),最重要的是每个元素最多重复 2 次​​span>

标签: r combinations permutation


【解决方案1】:

你在追求多重组合。有几个库能够在不产生任何重复组合的情况下产生所需的输出:arrangementsRcppAlgos,这是我编写的。以下是您将如何使用它:

arrangements::combinations(5, 5, freq = rep(2, 5))

RcppAlgos::comboGeneral(5, 5, freqs = rep(2, 5))

请注意,两个库的输出均按字典顺序排列。此外,这些库是用编译语言编写的,因此它们可以很好地扩展到更大的案例。

【讨论】:

  • 谢谢,但是这个函数返回向量只有两次两次,我需要所有向量最多两次两次,所以每个向量都有一个元素值
  • @antonionuzzo,您可以通过更改传递给freq(s) 的向量来更改每个元素的重复次数。另外,我有点困惑,因为您的原始帖子中存在 1 重复两次的情况,而您对问题的评论说“每个元素最多表示 2 两次”
【解决方案2】:

您可以使用repx 中的元素加倍。像这样设计自己的向量可以让您完全控制重复次数。

combn(x,5)
x <- rep(c(1:5),2)
> head(t(combn(x,5)))
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    1
[3,]    1    2    3    4    2
[4,]    1    2    3    4    3
[5,]    1    2    3    4    4
[6,]    1    2    3    4    5

编辑:正如评论,这将产生重复,如果这不是你想要的,你可以使用unique(t(combn...))) 删除这些重复。

【讨论】:

  • 您的方法将生成重复组合!例如:x &lt;- rep(c(1:3), 2) ; t(combn(x, 2))
  • 正如@DarrenTsai 指出的那样,当只有 51 个结果时,这将产生 252 个结果。
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2017-03-23
  • 2014-10-17
  • 2021-03-14
相关资源
最近更新 更多