找到vector(R)中所有可能的总和

时间:2014-07-28 18:32:02

标签: r combinations

我有一个像这样的美元值向量(vec):

[1]  460.08 3220.56 1506.20 1363.76 1838.00 1838.00 3684.94 2352.66 1606.02
[10] 1840.05  518.98 1603.53 1556.94  347.32  253.16   12.95 1828.81 1896.32
[19] 4962.60  426.33 3237.04 1601.40 2004.57  183.80 1570.75 3622.96  230.04
[28]  426.33 3237.04 1601.40 2004.57  183.80

如果我收取一些这些数字的费用,我怎么能找到它?例如,如果收费是6747.81,那么它必须来自1506.20 + 3237.04 + 2004.57(第3,第29和第31个向量元素)。如果得到总和,我怎么能解决这些向量元素?

我会想象找到所有可能的总和就是答案,然后将它与导致它的向量元素相匹配。

我玩过使用combn(vec,3)来找到所有3个,但这并不能完全满足我想要的效果。

1 个答案:

答案 0 :(得分:3)

您希望在colSums之后使用apply(或combn)来获取金额。

set.seed(100)
# Generate fake data
vec <- rpois(10, 20)
# Get all combinations of 3 elements
combs <- combn(vec, 3)
# Find the resulting sums
out <- colSums(combs)
# Making up a value to search for
val <- vec[2]+vec[6]+vec[8]
# Find which combinations lead to that value
id <- which(out == val)
# Pull out those combinations
combs[,id]

一些输出显示此示例的结果

> vec
 [1] 17 12 23 20 21 17 21 18 22 22
> val
[1] 47
> combs[,id]
     [,1] [,2]
[1,]   17   12
[2,]   12   17
[3,]   18   18

编辑:只是看到使用3个项目并不一定是限制。人们可以通过对每种可能的样本量进行推广来概括这一点,但我现在没有时间这样做。即使是中等规模的问题也会相当慢。