See also this tip on the R wiki:
http://wiki.r-project.org/rwiki/doku.php?id=tips:data-frames:sort

Also available as the orderBy function in the doBy package.

Kevin Wright


On Wed, May 27, 2009 at 11:19 AM, Linlin Yan <yanlinlin82@gmail.com> wrote:

> It's a very interesting problem. I just wrote a function for it:
>
> order.matrix <- function(m, columnsDecreasing = c('1'=FALSE), rows =
> 1:nrow(m))
> {
>  if (length(columnsDecreasing) > 0)
>  {
>    col <- as.integer(names(columnsDecreasing[1]));
>    values <- sort(unique(m[rows, col]), decreasing=columnsDecreasing[1]);
>    unlist(sapply(values, function(x) order.matrix(m,
> columnsDecreasing[-1], which((1:nrow(m) %in% rows) & (m[,
> col]==x)))));
>  }
>  else
>  {
>    rows;
>  }
> }
>
> For instance:
> > m <- matrix( c(2, 1, 1, 3, .5, .3, .5, .2), 4)
> > m
>     [,1] [,2]
> [1,]    2  0.5
> [2,]    1  0.3
> [3,]    1  0.5
> [4,]    3  0.2
> > m[order.matrix(m),]
>     [,1] [,2]
> [1,]    1  0.3
> [2,]    1  0.5
> [3,]    2  0.5
> [4,]    3  0.2
> > m[order.matrix(m, c("1"=FALSE, "2"=TRUE)),]
>     [,1] [,2]
> [1,]    1  0.5
> [2,]    1  0.3
> [3,]    2  0.5
> [4,]    3  0.2
>
> Any comment is welcome! ;)
>
> On Wed, May 27, 2009 at 11:04 PM, Linlin Yan <yanlinlin82@gmail.com>
> wrote:
> >> m <- matrix( c(2, 1, 1, 3, .5, .3, .5, .2), 4)
> >> m
> >     [,1] [,2]
> > [1,]    2  0.5
> > [2,]    1  0.3
> > [3,]    1  0.5
> > [4,]    3  0.2
> >> m[unlist(sapply(sort(unique(m[,1])), function(x)
> which(m[,1]==x)[order(m[(m[,1]==x),2], decreasing=TRUE)])),]
> >     [,1] [,2]
> > [1,]    1  0.5
> > [2,]    1  0.3
> > [3,]    2  0.5
> > [4,]    3  0.2
> >
> > On Wed, May 27, 2009 at 8:39 PM, Paul Geeleher <paulgeeleher@gmail.com>
> wrote:
> >> I've got a matrix with 2 columns and n rows. I need to sort it first
> >> by the values in column 1 ascending. Then for values which are the
> >> same in column 1, sort by column 2 decending. For example:
> >>
> >> 2 .5
> >> 1 .3
> >> 1 .5
> >> 3 .2
> >>
> >> Goes to:
> >>
> >> 1 .5
> >> 1 .3
> >> 2 .5
> >> 3 .2
> >>
> >> This is easy to do in spreadsheet programs but I can't seem to work
> >> out how to do it in R and haven't been able to find a solution
> >> anywhere.
> >>
> >>
> >> Thanks!
> >>
> >> -Paul.
> >>
> >> --
> >> Paul Geeleher
> >> School of Mathematics, Statistics and Applied Mathematics
> >> National University of Ireland
> >> Galway
> >> Ireland
> >>
> >> ______________________________________________
> >> R-help@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.
> >>
> >
>
> ______________________________________________
> R-help@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.
>

	[[alternative HTML version deleted]]


