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 <yanlinli...@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 <paulgeele...@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.