2012-12-24 47 views
8

Làm thế nào để có được chỉ số của K nhỏ nhất hoặc lớn nhất yếu tố trong eaach hàng của một ma trận trong R?Lấy chỉ số của K nhỏ nhất hoặc lớn nhất các yếu tố trong mỗi hàng của một ma trận trong R

Ví dụ: Tôi có ma trận:

2 3 1 65 2 
46 7 9 3 2 
9 45 3 5 7 
24 65 87 3 6 
34 76 54 33 6 

Tôi muốn nhận ma trận Chỉ số có 2 phần tử nhỏ nhất (bẻ gãy bất kỳ cách nào) trong mỗi hàng. kết quả phải ở định dạng sau đây:

3 1 
5 4 
3 4 
4 5 
5 4 

tôi đã cố gắng vài lệnh sử dụng sort, apply, arrayInd, which vv Nhưng vẫn không thể có được kết quả mong muốn. Mọi trợ giúp đều được chào đón.

Trả lời

11
apply(mat, 1, which.max) #.....largest 
apply(mat, 1, which.min) #.....smallest 

t(apply(mat, 1, sort)[ 1:2, ]) # 2 smallest in each row 

t(apply(mat, 1, order)[ 1:2, ]) # indices of 2 smallest in each row 

Ngoài việc sử dụng giảm = TRUE, bạn cũng có thể sử dụng này cho hai lớn nhất trong một vòng:

t(apply(mat, 1, order)[ 5:4, ])  
+0

Nó trả về giá trị của tôi, nhưng tôi muốn chỉ số .. –

+0

@DWin Tôi đã đề xuất chỉnh sửa để thêm đối số 'giảm' vào' thứ tự' để nhận được X yếu tố lớn nhất/nhỏ nhất trong một hàng. –

+0

Cảm ơn @BlueMagister –

0

gì về

  • tìm các chỉ số của các giá trị lớn nhất k trong mỗi hàng

    apply(mat, 1, function(x, k) which(x <= max(sort(x, decreasing = F)[1:k]), arr.ind = T), k)` 
    
  • tìm các chỉ số của k giá trị nhỏ nhất trong mỗi hàng

    apply(mat, 1, function(x, k) which(x >= min(sort(x, decreasing = T)[1:k]), arr.ind = T), k)` 
    

On ví dụ của bạn, ví k <- 2, kết quả cũ trong

 [,1] [,2] [,3] [,4] [,5] 
[1,] 2 1 1 2 2 
[2,] 4 3 2 3 3 

và kết quả sau trong

[[1]] 
[1] 1 3 5 

[[2]] 
[1] 4 5 

[[3]] 
[1] 3 4 

[[4]] 
[1] 4 5 

[[5]] 
[1] 4 5 

Thay đổi tham số thứ hai của apply từ 1 đến 2 để tìm kiếm các cột.

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