[R] Sort matrix by column 1 ascending then by column 2 decending

Linlin Yan yanlinlin82 at gmail.com
Wed May 27 18:19:28 CEST 2009


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 at 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 at 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 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.
>>
>




More information about the R-help mailing list