【问题标题】:R subsetting with multiple conditions具有多个条件的 R 子集
【发布时间】:2015-02-13 11:50:43
【问题描述】:

我正在尝试根据矩阵 beta 的标准来优化更改矩阵 alpha 中的值:

alpha <- matrix(0,9)
beta <- matrix(1:3,3)
alpha[beta>1] <- beta[beta>1]

这给出了beta1 2 3alpha0 2 3 0 2 3 0 2 3

虽然我不确定上述方法是不是最有效的方法,但实际上我也只想更改 alpha 矩阵第一部分的值,即前三个条目(以上,因为 beta 是alpha 大小的三分之一,alpha 中的条目 mod 3 相同)。我尝试了以下方法:

alpha <- matrix(0,9)
beta <- matrix(1:3,3)
alpha[1:3 & beta>1] <- beta[beta>1]

这仍然返回0 2 3 0 2 3 0 2 3alpha,而不是我想要得到的0 2 3 0 0 0 0 0 0。如何让它发挥作用?

【问题讨论】:

  • 你想在alpha的前半部分应用什么?
  • 为澄清而编辑。
  • 鉴于beta 是使用rnorm() 生成的,我认为您不能保证beta[beta &gt; 0] 将始终导致50 个元素覆盖alpha[1:50, ]
  • @DavidArenburg:如果我理解正确,我认为这是不正确的 - 上面的代码遍历了 alpha 的全部 100 个条目(对 alpha[1] 和 @ 做同样的事情987654337@等)
  • 随便alpha[which(beta &gt; 1)] &lt;- beta[beta &gt; 1]

标签: r matrix subset


【解决方案1】:

我假设您想处理矩阵的前半部分,并且只替换符合特定标准的值。在你的情况下&gt; 0

set.seed(357)
alpha <- matrix(0,10)
beta <- matrix(rnorm(5),5)
beta

           [,1]
[1,] -1.2411173
[2,] -0.5832050
[3,]  0.3947471
[4,]  1.5042111
[5,]  0.7667997

只应应用最后三行(alpha 的第 3、4 和 5 行)。

rownames(alpha) <- 1:nrow(alpha)
alpha[rownames(alpha) %in% 1:nrow(beta), ][beta > 0] <- beta[beta > 0]
alpha

        [,1]
1  0.0000000
2  0.0000000
3  0.3947471
4  1.5042111
5  0.7667997
6  0.0000000
7  0.0000000
8  0.0000000
9  0.0000000
10 0.0000000

【讨论】:

  • 你可以这样做alpha[which(beta &gt; 0)] &lt;- beta[beta &gt; 0]
  • @DavidArenburg 您的方法将对第一行 nrow(beta) 隐式起作用。我添加了rownames 的复杂性以使其更通用。
  • 也许你是对的,我没有深入挖掘 OP 的意图。
猜你喜欢
  • 1970-01-01
  • 2021-08-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多