假设我的样本如下:
x <- matrix(sample(100,replace = TRUE), nrow = 10)
和包含我想要访问的索引的向量,如下所示
indices <- c(22,23,55,2)
我如何获得这些指数的行和列?
我想也许这会有所帮助
which(m == m[indices], arr.ind = TRUE)
但它只返回第一个索引。我假设我做了什么是错误的
答案 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