根据列向量子集矩阵

时间:2014-11-19 18:04:16

标签: r matrix

我有一个矩阵,H。我想从每一行中选择一个值,从矢量P中选择一列。

H = matrix(data=runif(6),ncol=2)
P = c(2,1,2)

我之后的输出是一个包含

的向量
c(H[1,P[1]],H[2,P[2]],H[3,P[3]])

我正在使用更大的数据,因此这样做的通用方法会很好。

这有效diag(H[,P]),但是:a)我不明白为什么H[,P]返回一个方阵,而b)我宁愿不使用额外的函数(在这种情况下{{1} })。

如果以前曾被问过,我道歉。

2 个答案:

答案 0 :(得分:6)

尝试

H[cbind(seq_len(nrow(H)), P)]
## [1] 0.6733731 0.7396847 0.5953580

这里我们按照P

中指示的连续行和列进行索引

关于你的问题,H[, P]返回矩阵的原因是因为你告诉R:

  

选择列中的所有行:2,1和2来自矩阵" H"

因此,您获得的结果是具有相同的第一列和第三列的矩阵。

答案 1 :(得分:0)

  

这有效,但是:a)我不明白为什么H [,P]返回一个正方形   矩阵,

H [,P]返回一个方阵,因为P是一个长度为3的向量。这里你基本上是说你希望矩阵再次返回第2列,第1列和第2列。

如果你想要一个值,那么你也需要传递一行。如果你想让它随机选择一行或给它一个特定的行,你可以传递一个随机数或类似的东西。例如,第1行:

H[1,P]

或随机(但在矩阵中相同)行:

H[floor(runif(1, 1, dim(H)[1])),P]