生成总和为R的值的所有组合,而不重复

时间:2016-01-06 09:24:40

标签: r

我有一个向量,需要找到总和在范围之间的所有组合。

set.seed(007)
w <- round(runif(10, 0, 1) * 100)
w
 [1] 99 40 12  7 24 79 34 97 17 46

我希望这些数字的所有组合(不重复)的矩阵在“w”中,其总和在50到55之间 矩阵可以包含值0和1,无论该位置的值是否在该解决方案中被考虑

  

例如:0 1 1 0 0 0 0 0 0 0表示将考虑40和12

有许多可用的解决方案,但他们正在使用重复。我无法在R中知道如何做到这一点。

任何想法。

1 个答案:

答案 0 :(得分:3)

我们可以使用combn,它可以从矢量创建组合,而不会重复。

首先,我们创建所有组合:

w_comb <- combn(w,2)

然后我们测试我们的组合满足我们的约束。我们用colSums做这个(感谢nicola)。

w_comb_tests <- colSums(w_comb) >= 50 & colSums(w_comb) <= 55

最后,我们为每个选定的组合生成一行0和1:

res <- t(apply(w_comb[,w_comb_tests],2,function(x){
  as.numeric(w %in% x)
}))