如何为每个元素创建最多x个重复的元素组合

时间:2018-11-04 16:18:32

标签: r combinations permutation

我将生成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),...)

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

2 个答案:

答案 0 :(得分:2)

您正在追求多组组合。我编写了两个库,它们可以产生所需的输出而不会产生任何重复的组合:arrangementsRcppAlgos。这是您的用法:

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

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

请注意,两个库的输出均按字典顺序排列。而且,这些库是用编译语言编写的,因此可以很好地扩展到较大的情况。

答案 1 :(得分:1)

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

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...)))删除这些重复项。