此信息的扩展名: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]]列中的第三高值。
答案 0 :(得分:1)
获取最大值和最小值的索引
apply(m1, 2, which.max)
apply(m1, 2, which.min)
如果我们对第二高,第二低等感兴趣,那么
apply(m1, 2, function(x) order(x)[2])
或将sort
与index.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)