Поиск индекса строки, содержащей максимальное значение, используя R - PullRequest
115 голосов
/ 13 апреля 2009

Учитывая следующую матрицу, давайте предположим, что я хочу найти максимальное значение во втором столбце:

mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3)
mat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    7    8    9
[3,]    4    5    6

Я знаю, max(mat[,2]) вернет 8. Как я могу вернуть индекс строки, в данном случае второй строки?

Ответы [ 3 ]

163 голосов
/ 13 апреля 2009

См. ?which.max

> which.max( matrix[,2] )
[1] 2
27 голосов
/ 13 апреля 2009

См. ?order. Вам просто нужен последний индекс (или первый, в порядке убывания), поэтому это должно помочь:

order(matrix[,2],decreasing=T)[1]
2 голосов
/ 09 ноября 2015

Как насчет следующего, где у - имя вашей матрицы, и вы ищете максимум во всей матрице:

row(y)[y==max(y)]

, если вы хотите извлечь строку:

y[row(y)[y==max(y)],] # this returns unsorted rows.

Чтобы вернуть отсортированные строки, используйте:

y[sort(row(y)[y==max(y)]),]

Преимущество этого подхода заключается в том, что вы можете изменить условное внутреннее содержимое на все, что вам нужно. Также, используя col(y) и расположение висящей запятой, вы также можете извлечь столбцы.

y[,col(y)[y==max(y)]]

Чтобы найти только строку для максимума в определенном столбце, скажем, столбец 2, который вы можете использовать:

seq(along=y[,2])[y[,2]==max(y[,2])]

опять-таки, условное выражение является гибким, чтобы искать различные требования.

Дополнительные идеи см. В превосходной главе "Введение в S и S-Plus" Фила Спектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...