给定索引,在矩阵中打印多个元素的行和列

时间:2016-02-27 21:22:14

标签: r

假设我的样本如下:

x <- matrix(sample(100,replace = TRUE), nrow = 10)

和包含我想要访问的索引的向量,如下所示

indices <- c(22,23,55,2)

我如何获得这些指数的行和列?

我想也许这会有所帮助

which(m == m[indices], arr.ind = TRUE)

但它只返回第一个索引。我假设我做了什么是错误的

2 个答案:

答案 0 :(得分:0)

> for (indices in unique(indices)){
+       print(which(m == m[indices], arr.ind = TRUE))
+ }
     row col
[1,]   4   1
[2,]   2   7
[3,]  10   8

答案 1 :(得分:0)

虽然Hack-R的解决方案很棒。如果x中的任何其他变量与x [index]

具有相同的值,则它可能为每个索引提供多个结果
set.seed(100)
x <- matrix(sample(100,replace = TRUE), nrow = 10)
indices <- c(22,23,55,2)


for (indices in unique(indices)){
       print(which(x == x[indices], arr.ind = TRUE))
 }

     row col
[1,]   2   3
     row col
[1,]   1   3
[2,]   3   3
     row col
[1,]   5   6
[2,]   9   6
[3,]   2   9
     row col
[1,]   2   1
[2,]   6   6

这可能不是预期的行为。 此外,重置&#39;指数&#39;每个循环可能都是不利的。

一种解决方案是创建矩阵的临时副本。将除这些索引之外的所有值设置为零,然后进行比较以仅获取这些索引的位置。

temp <- x
temp[-(indices)] <- 0
which(temp > 0, arr.ind = TRUE)

     row col
[1,]   2   1
[2,]   2   3
[3,]   3   3
[4,]   5   6

注意:它以索引的递增顺序返回结果:

sort(indices)
[1]  2 22 23 55