Учитывая следующую матрицу, предположим, что я хочу найти максимальное значение во втором столбце:
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. Как мне вернуть индекс строки, в данном случае строку два?
order
возвращает индекс, который имеет каждый элемент, но отсортированный по значению элементов.rank
возвращает индекс, который имел бы каждый элемент , если бы список был отсортирован первым. Таким образомorder
возвращает текущие значения индекса; и использоваться в качестве «индексатора» в терминах панд.Как насчет следующего, где y - это имя вашей матрицы, и вы ищете максимум во всей матрице:
если вы хотите извлечь строку:
Чтобы вернуть отсортированные строки, используйте:
Преимущество этого подхода в том, что вы можете изменить условное выражение внутри на все, что вам нужно. Кроме того, используя
col(y)
и расположение висячей запятой, вы также можете извлекать столбцы.Чтобы найти только строку для максимума в определенном столбце, скажем, в столбце 2, вы можете использовать:
опять же, условное выражение гибко, чтобы искать различные требования.
Дополнительные идеи см. В превосходной главе 5 «Введение в S и S-Plus» Фила Спектора.
источник