# [R] Sorting a matrix in an odd way

Tony Plate tplate at blackmesacapital.com
Tue May 13 06:46:08 CEST 2003

```I assume you mean "a vector that is the column numbers as sorted by the
*index* of the first non-NA value"

I think this will do what you want:

> order(apply(foo, 2, function(col) which(!is.na(col))[1]))
[1] 2 5 3 4 1
>

Fortuitously, this also gives correct results when a column contains all NA
values (because [1] of an empty vector returns NA, and the default for
order() is to put NA values last).

hope this helps,

Tony Plate

At Monday 10:18 PM 5/12/2003 -0600, Andy Bunn wrote:
>Hi, I have a matrix not unlike this:
>
>foo <- matrix(,5,5)
>foo[5,1] <- 1
>foo[1:3,2] <- 1
>foo[3:4,3] <- 1
>foo[4:5,4] <- 1
>foo[2:4,5] <- 1
>foo
>      [,1] [,2] [,3] [,4] [,5]
>[1,]   NA    1   NA   NA   NA
>[2,]   NA    1   NA   NA    1
>[3,]   NA    1    1   NA    1
>[4,]   NA   NA    1    1    1
>[5,]    1   NA   NA    1   NA
>
>I want to get a vector that is the column numbers as sorted by the first
>non-NA value.
>Like this:
>2,5,3,4,1
>
>I have been able to do this by adding an index and looping the matrix by
>column. Can anybody think of a cleverer way to do this?
>