Индекс возврата минимальной строки для каждого столбца матрицы - PullRequest
2 голосов
/ 18 мая 2019

Предположим, у меня есть матрица, подобная примеру ниже, под названием m1:

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

Как получить строку индекса для минимального значения каждого столбца?Я знаю, which.min() будет возвращать значение индекса столбца для каждой строки.

Выходные данные должны быть: 3 и 3, потому что минимум для столбца [, 1] равен 4, что соответствует строке [3,], и минимумдля столбца [, 2] - 1 соответствующая строка [3,].

1 Ответ

2 голосов
/ 18 мая 2019

Если нам нужен индекс по столбцам, используйте apply с MARGIN=2 и применяйте which.min

apply(m1, 2, which.min)
#[1] 3 3

Если необходим 1 столбец за раз:

apply(as.matrix(m1[,1, drop = FALSE]), 2, which.min)

Если мы проверим ?Extract, по умолчанию используется

x [i, j, ..., drop = TRUE]

drop - Для матриц и массивов. Если TRUE, результат приводится к минимально возможному измерению (см. Примеры). Это работает только для извлечения элементов, а не для замены. Для получения более подробной информации смотрите описание.

Чтобы избежать потери размеров, используйте drop = FALSE

Если нам нужны минимальные значения каждой строки

do.call(pmin, as.data.frame(m1))

или

apply(m1, 2, min)

Или

library(matrixStats)
rowMins(m1)

данные

m1 <- matrix(6:1,nrow=3,ncol=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...