Чтобы получить индекс самых высоких и самых низких значений
apply(m1, 2, which.max)
apply(m1, 2, which.min)
Если нас интересуют 2-е наивысшее, 2-е наименьшее и т. Д.
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)