An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20130110/a0d0be04/attachment-0001.pl>
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 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.
Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.
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
-----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 complete example
mat<-cbind(c('w','x','y','z'),c('a','b','c','d'))
matOrd <- mat[order(factor(mat[,2], levels = c('c', 'b', 'd','a'))), ]
matOrd
[,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:
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.
Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20130110/a54bc851/attachment-0001.pl>
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20130110/2404ce83/attachment-0001.pl>
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:
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.
Dr Ioannis Kosmidis Department of Statistical Science, University College, London, WC1E 6BT, UK Webpage: http://www.ucl.ac.uk/~ucakiko