矩阵每一列的N个最小/最大值的返回索引行数

时间:2019-05-24 04:18:37

标签: r matrix data-manipulation

此信息的扩展名:Return Index of Minimum Row for Each Column of Matrix

假设我有一个类似下面示例的矩阵,称为m1

m1<-matrix(6:1,nrow=3,ncol=2)
     [,1] [,2]
[1,]    6    3
[2,]    5    2
[3,]    4    1

如何返回矩阵每一列的N个最低值的索引行数?

例如,如果我想要列[,1]中第二低的行的索引行,则行索引应为2 [2,],因为列[,1]中第二高的值是5。

如果我想要[,1]列中的第三低值,则行索引应为1 [1,],因为6是[[1]]列中的第三高值。

1 个答案:

答案 0 :(得分:1)

获取最大值和最小值的索引

apply(m1, 2, which.max)
apply(m1, 2, which.min)

如果我们对第二高,第二低等感兴趣,那么

apply(m1, 2, function(x) order(x)[2])

或将sortindex.return = TRUE一起使用

apply(m1, 2, function(x) sort(x, index.return = TRUE))

然后提取感兴趣的索引

apply(m1, 2, function(x) {i1 <- sort(x, index.return = TRUE)$ix
                i1[i1 < 3]
     })

如果我们需要行索引

getrowIndexEachCol <- function(mat, n, isMax = TRUE) {
   if(!isMax) mat <- -mat
   apply(mat, 2, function(x) {i1 <- rank(x)
            i1[i1 <= n]
       })
  }
 getrowIndexEachCol(m1, 2)

使用其他数据集会发现差异

m2 <- cbind(c(7, 3, 5, 8, 11), c(4, 8, 6, 5, 3))
getrowIndexEachCol(m2, 3)