我有一个向量,需要找到总和在范围之间的所有组合。
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中知道如何做到这一点。
任何想法。
答案 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)
}))