[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