[R] sort matrix based on a specific order

William Dunlap wdunlap at tibco.com
Thu Jan 10 19:30:20 CET 2013


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


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of array chip
> Sent: Thursday, January 10, 2013 10:22 AM
> To: r-help at r-project.org
> 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]]




More information about the R-help mailing list