【问题标题】:Matrix construction in R with condition on columnsR中的矩阵构造,列上的条件
【发布时间】:2016-07-18 16:40:16
【问题描述】:

我想构造一个 3 行 200 列的矩阵。

我希望每一行的值从 0 到 200,但我也希望这个矩阵只包含这 3 行总和为 200 的列。

应该是这样的:

0   1   2   ... 200 
1   2   3   ... X 
199 197 195 ... Y

我想这可能是一个可能的开始,但我真的不知道我该怎么做。

我试图做 3 个嵌套的 for 循环,但这并没有让我到任何地方。

【问题讨论】:

  • 我给出了一个答案,它返回总和为 200 的所有 3 路数字组合,但重新阅读您的问题,我不确定这是否是您想要的。你为什么决定这个矩阵有 200 列? (三个数相加得到200的方法远不止200种)
  • 你说的很对,是因为我对这个矩阵结构理解不够。
  • 好的:也许您可以进一步解释一下您使用矩阵的目的是什么?
  • 看看following post。我认为有足够的重叠,所以它应该是有帮助的。

标签: r matrix


【解决方案1】:

这可以分两步完成,使用expand.grid 函数(生成向量的所有组合),然后按列过滤:

m <- t(as.matrix(expand.grid(0:200, 0:200, 0:200)))
m <- m[, colSums(m) == 200]

【讨论】:

  • 感谢您的回复。我希望我的行具有从 0 到 200 的值,但如果我这样做 max(m[1,]) 它等于 65。这是最困难的部分(至少对我来说)。
  • 这就是我想要的,谢谢。所以我可以安全地假设这个矩阵的列中有所有方法来将 3 个从 0 到 200 的数字相加,总和为 200?
  • @JavierM88 第二个(expand.grid 解决方案)可以,是的。请注意,它包含不同顺序的重复项 - 例如,它包含 0+0+200、0+200+0 和 200+0+0 作为单独的列
  • 是的,行上的重复值也是我想要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2016-09-26
  • 2020-08-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多