Поиск индекса строки, содержащего максимальное значение, используя R

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

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. Как я могу вернуть индекс строки, в этом случае строка две?

Ответ 1

См. ?which.max

> which.max( matrix[,2] )
[1] 2

Ответ 2

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

order(matrix[,2],decreasing=T)[1]

Ответ 3

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

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)]]

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

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

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

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