我有一个像这样的美元值向量(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个,但这并不能完全满足我想要的效果。
答案 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个项目并不一定是限制。人们可以通过对每种可能的样本量进行推广来概括这一点,但我现在没有时间这样做。即使是中等规模的问题也会相当慢。