2009-04-13 39 views

Odpowiedz

26

Zobacz ?order. Trzeba tylko ostatni indeks (lub pierwsza w kolejności malejącej), więc to powinno wystarczyć:

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

+1 Podoba mi się ta odpowiedź, ponieważ pozwala mi łatwo spojrzeć na kilka pierwszych, a nie tylko na maksimum. Odkryłem, że przydatne jest wyszukiwanie dat bliskich maksymalnych wartości z innej kolumny. – djhocking

+7

Należy jednak pamiętać, że jest to wolniejsza niż which.max, ponieważ trzeba posortować całą kolumnę :) – bartektartanus

+0

@bartektartanus A jak myślisz, który.max określa max? : p –

156

Zobacz ?which.max

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

Jak o następujących, gdzie y jest nazwą danej matryca i szukasz maksimum w całej matrycy:

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

jeśli chcesz, aby wyodrębnić z rzędu:

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

Aby powrócić posortowane wiersze użycia:

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

Zaletą tego podejścia jest to, że można zmienić warunkowego wewnątrz do niczego potrzebne. Ponadto, używając col(y) i lokalizacji wiszącego przecinka można również wyodrębnić kolumny.

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

Aby znaleźć tylko wiersz dla max w danej kolumnie, powiedzmy kolumna 2 można użyć:

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

ponownie warunkowego jest elastyczny szukać różnych wymagań.

Zobacz doskonałe wyniki Phil Spector w "Wstępie do S i S-Plus" w rozdziale 5 w celu uzyskania dodatkowych pomysłów.