Ответ 1
См. ?which.max
> which.max( matrix[,2] )
[1] 2
Учитывая следующую матрицу, предположим, что я хочу найти максимальное значение в столбце 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. Как я могу вернуть индекс строки, в этом случае строка две?
См. ?which.max
> which.max( matrix[,2] )
[1] 2
См. ?order
. Вам просто нужен последний индекс (или, во-первых, в порядке убывания), поэтому это должно сделать трюк:
order(matrix[,2],decreasing=T)[1]
Как насчет следующего: где 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 для дополнительных идей.