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),...)
最重要的是每个元素最多代表两次。我想知道是否有一个函数可以做到这一点。
答案 0 :(得分:2)
您正在追求多组组合。我编写了两个库,它们可以产生所需的输出而不会产生任何重复的组合:arrangements
和RcppAlgos
。这是您的用法:
arrangements::combinations(5, 5, freq = rep(2, 5))
RcppAlgos::comboGeneral(5, 5, freqs = rep(2, 5))
请注意,两个库的输出均按字典顺序排列。而且,这些库是用编译语言编写的,因此可以很好地扩展到较大的情况。
答案 1 :(得分:1)
您可以使用x
将rep
中的元素加倍。这样设计自己的向量,可以完全控制重复次数。
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...)))
删除这些重复项。