假设我有下面的表格:
VAR ITER_1 ITER_2 ITER_3 ITER_4
VAR1 6 8 5 7
VAR2 5 1 7 8
VAR3 3 8 8 4
VAR4 8 7 2 5
VAR5 8 7 9 2
VAR6 8 7 3 6
VAR7 4 7 4 5我希望为每个行选择列的组合,这样就可以有等于特定和的组合。例如,在这种情况下,假设我想让ITER的每个VAR组合为15,在这种情况下,我希望为VAR1、ITER_2和ITER_4选择。VAR2,ITER_3 & ITER_4。
我想开发一个代码,这样代码可以告诉我要为每个VAR选择哪些列值。
有谁能建议一些方法吗?不需要编写代码,但我可以使用逻辑。
谢谢。
发布于 2013-08-07 16:34:31
如果对所有列都取之和,则此操作有效:
data = data.frame(x = 1:3, y = 2:4, z = 5:7)
sums = apply(data, 1, sum)
target.val = 11
which(sums == target.val)否则,这看起来就像一个确切的封面问题。cover
或
你可以使用随机方法,比如遗传算法。简单化的解决方案:
find.colsums = function(data, target, N.tries = 100)
{
nrows = nrow(data)
max.cols = ncol(data)
n.columns = sample(max.cols, N.tries, replace = TRUE)
for (i in 1:N.tries){
test.cols = sample(max.cols, n.columns[i])
for (row in 1:nrows){
if (sum(data[row, test.cols]) == target){
cat("match at row:", row, "cols:", test.cols, "\n")
}
}
}
}示例:
data = data.frame(x = 1:3, y = 2:4, z = 5:7)
target = 7
find.colsums(data, target)大数据集的乐趣:
N = 1000
min.val = 1
max.val = 30
ncols = 10
target = ((min.val + max.val) * ncols/2)
data = matrix(sample(min.val:max.val, N, replace = TRUE), ncol = ncols)
find.colsums(data, target, N.tries = 1000)发布于 2013-08-07 16:32:38
您应该研究递归算法。
您可以找到一个很好的示例here
https://stackoverflow.com/questions/18108560
复制相似问题