Skip to content

sort matrix based on a specific order

8 messages · array chip, jim holtman, arun +3 more

#
Define them as factors with a specified order for your sorting.

e.g.

x <- factor(your_data, levels = c('c', 'b','d', 'a'))
On Thu, Jan 10, 2013 at 1:21 PM, array chip <arrayprofile at yahoo.com> wrote:

  
    
#
HI,
Try this:


?mat[match(ind,mat[,2]),]
? # ? [,1] [,2]
#[1,] "y"? "c" 
#[2,] "x"? "b" 
#[3,] "z"? "d" 
#[4,] "w"? "a" 
A.K. 




----- Original Message -----
From: array chip <arrayprofile at yahoo.com>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc: 
Sent: Thursday, January 10, 2013 1:21 PM
Subject: [R] sort matrix based on a specific order

Hi I have a character matrix with 2 columns A and B, If I want to sort the matrix based on the column B, but based on a specific order of characters:

mat<-cbind(c('w','x','y','z'),c('a','b','c','d'))
ind<-c('c','b','d','a')

I want "mat" to be sorted by the sequence in "ind":

???? [,1] [,2]
[1,] "y"? "c" 
[2,] "x"? "b" 
[3,] "z"? "d" 
[4,] "w"? "a"

Is there any simple function that can do this?

Thanks

John

??? [[alternative HTML version deleted]]


______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
#
You can use factor() or match() to specify a particular order.  E.g.,
  > mat<-cbind(c('w','x','y','z'),c('a','b','c','d'))
  > ind<-c('c','b','d','a')
  > mat[ order(match(mat[,2], ind)), ]
       [,1] [,2]
  [1,] "y"  "c" 
  [2,] "x"  "b" 
  [3,] "z"  "d" 
  [4,] "w"  "a" 
  > mat[ order( factor(mat[,2], levels=ind) ), ]
       [,1] [,2]
  [1,] "y"  "c" 
  [2,] "x"  "b" 
  [3,] "z"  "d" 
  [4,] "w"  "a"

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
more complete example
[,1] [,2]
[1,] "y"  "c"
[2,] "x"  "b"
[3,] "z"  "d"
[4,] "w"  "a"

        
On Thu, Jan 10, 2013 at 1:21 PM, array chip <arrayprofile at yahoo.com> wrote:

  
    
#
mat[match(ind, mat[, 2]), ]
     [,1] [,2]
[1,] "y"  "c" 
[2,] "x"  "b" 
[3,] "z"  "d" 
[4,] "w"  "a" 

though you need to take care if you have cases where ind will contains letters that are not in mat[, 2] and so on (check ?match).

Best,
I
On 10 Jan 2013, at 18:21, array chip <arrayprofile at yahoo.com> wrote: