2009-04-13 44 views
110

Với ma trận sau đây cho phép giả định tôi muốn tìm giá trị lớn nhất trong cột hai:Finding chứa giá trị lớn nhất bằng R

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 

Tôi biết max(mat[,2]) sẽ trở lại 8. Làm thế nào tôi có thể trở lại chỉ số liên tiếp, trong trường hợp này là hàng thứ hai?

Trả lời

26

Xem ?order. Bạn chỉ cần chỉ số cuối cùng (hoặc đầu tiên, theo thứ tự giảm dần), do đó điều này sẽ làm các trick:

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

+1 Tôi thích câu trả lời này vì nó cho phép tôi dễ dàng nhìn vào số ít nhất, thay vì chỉ là số tiền tối đa. Tôi đã tìm thấy nó hữu ích cho việc tìm kiếm ngày của các giá trị gần tối đa từ một cột khác. – djhocking

+7

Nhưng hãy nhớ rằng điều này là chậm hơn so với which.max, bởi vì bạn cần phải sắp xếp toàn bộ cột :) – bartektartanus

+0

@bartektartanus Và làm thế nào để bạn giả sử which.max con số ra tối đa? : p –

156

Xem ?which.max

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

Làm thế nào về những điều sau đây, trong đó y là tên của bạn ma trận và bạn đang tìm kiếm tối đa trong toàn bộ ma trận:

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

nếu bạn muốn trích xuất các hàng:

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

Để trả lại hàng được sắp xếp sử dụng:

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

Ưu điểm của phương pháp này là bạn có thể thay đổi các điều kiện bên trong để bất cứ điều gì bạn cần. Ngoài ra, sử dụng col(y) và vị trí của dấu phẩy treo, bạn cũng có thể trích xuất các cột.

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

Để tìm chỉ hàng cho tối đa trong một cột cụ thể, nói cột 2 bạn có thể sử dụng:

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

một lần nữa các điều kiện linh hoạt để tìm kiếm yêu cầu khác nhau.

Xem phần tuyệt vời của Phil Spector "Giới thiệu về S và S-Plus" Chương 5 để có thêm ý tưởng.

Các vấn đề liên quan