Search code examples
rmatrixcell

Matrix indices ordered by the value they contain


I have a matrix like this:

 mat<-matrix(c(10,45,2,15,3,98,1,7,13),nrow = 3)

mat
     [,1] [,2] [,3]
[1,]   10   15    1
[2,]   45    3    7
[3,]    2   98   13

I want to get the indices of ordered values, as what we can get from order(x, arr.idx = T) but applied to a matrix. That is:

   [,1]  [,2]
     1    3
     3    1
     2    2
     2    3
     1    1
     3    3
     1    2
     2    1
     3    2

Is it there a fast way to do it?

Thank you in advance


Solution

  • You can use

    arrayInd(order(mat), dim(mat), dimnames(mat))
    #      [,1] [,2]
    # [1,]    1    3
    # [2,]    3    1
    # [3,]    2    2
    # [4,]    2    3
    # [5,]    1    1
    # [6,]    3    3
    # [7,]    1    2
    # [8,]    2    1
    # [9,]    3    2