首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件变量选择

条件变量选择
EN

Stack Overflow用户
提问于 2013-08-07 16:20:35
回答 2查看 112关注 0票数 0

假设我有下面的表格:

代码语言:javascript
复制
     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,在这种情况下,我希望为VAR1ITER_2ITER_4选择。VAR2ITER_3 & ITER_4

我想开发一个代码,这样代码可以告诉我要为每个VAR选择哪些列值。

有谁能建议一些方法吗?不需要编写代码,但我可以使用逻辑。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 16:34:31

如果对所有列都取之和,则此操作有效:

代码语言:javascript
复制
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

你可以使用随机方法,比如遗传算法。简单化的解决方案:

代码语言:javascript
复制
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")
      }
    }
  }
}

示例:

代码语言:javascript
复制
data = data.frame(x = 1:3, y = 2:4, z = 5:7)
target = 7
find.colsums(data, target)

大数据集的乐趣:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2013-08-07 16:32:38

您应该研究递归算法。

您可以找到一个很好的示例here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18108560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档