Menemukan indeks baris yang mengandung nilai maksimum dengan menggunakan R


117

Diberikan matriks berikut mari kita asumsikan saya ingin menemukan nilai maksimum di kolom dua:

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

Saya tahu max(mat[,2])akan mengembalikan 8. Bagaimana saya bisa mengembalikan indeks baris, dalam hal ini baris dua?

Jawaban:



27

Lihat ?order. Anda hanya perlu indeks terakhir (atau yang pertama, dalam urutan menurun), jadi ini triknya:

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

5
+1 Saya menyukai jawaban ini karena memungkinkan saya untuk dengan mudah melihat beberapa teratas, bukan hanya maks. Saya merasa berguna untuk mencari tanggal mendekati nilai maksimal dari kolom lain.
djhocking

7
Namun perlu diingat bahwa ini lebih lambat dari yang. Maks, karena Anda perlu mengurutkan seluruh kolom :)
bartektartanus

@bartektartanus Dan bagaimana menurut Anda which.max menggambarkan max? : p
Nick Ulle

10
Tanpa memilah, tentunya. Mencari tahu kebutuhan maksimal O (n), menyortir membutuhkan lebih banyak waktu :)
bartektartanus

Saya bingung antara pangkat dan ketertiban. ordermengembalikan indeks yang dimiliki setiap elemen, tetapi diurutkan berdasarkan nilai elemen. rankmengembalikan indeks yang akan dimiliki setiap elemen , jika daftar diurutkan terlebih dahulu. Dengan demikian ordermengembalikan nilai indeks saat ini; dan digunakan sebagai "pengindeks" dalam istilah pandas.
The Red Pea

2

Bagaimana dengan yang berikut ini, dimana y adalah nama dari matriks anda dan anda sedang mencari nilai maksimum di seluruh matriks:

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

jika Anda ingin mengekstrak baris:

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

Untuk mengembalikan baris yang diurutkan, gunakan:

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

Keuntungan dari pendekatan ini adalah Anda dapat mengubah bagian dalam bersyarat menjadi apa pun yang Anda butuhkan. Selain itu, menggunakan col(y)dan lokasi tanda koma gantung Anda juga dapat mengekstrak kolom.

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

Untuk menemukan hanya baris untuk maks di kolom tertentu, katakan kolom 2, Anda dapat menggunakan:

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

lagi-lagi persyaratannya fleksibel untuk mencari persyaratan yang berbeda.

Lihat Bab 5 "Pengantar S dan S-Plus" yang sangat baik dari Phil Spector untuk gagasan tambahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.