# [R] lexicographic sort of ordered lists

Peter Dalgaard BSA p.dalgaard at biostat.ku.dk
Fri Jul 18 23:54:06 CEST 2003

```"J. P. Morgan" <jpmorgan at vt.edu> writes:

> Does anyone know how to execute the following sort problem in R? Matrix X
> has positive integer entries, and each column has been sorted in ascending
> order. The problem is now to order the columns lexicographically. For
> instance if the matrix X is
>
>
>
> 1 2 1 1 2
>
> 2 2 3 3 2
>
> 3 5 5 4 2
>
>
>
> then the result should be
>
>
>
> 1 1 1 2 2
>
> 2 3 3 2 2
>
> 3 4 5 2 5
>
>
>
> Let ONE be a vector of 1's of length ncol(X). The result in this example can
> be accomplished by
>
>
>
> X=X[,order(ONE,X[1,],X[,2],X[,3])]

What's the ONE supposed to be good for??? Works just as well without
(after fixing the obvious typo):

> X[,order(X[1,],X[2,],X[3,])]
V1 V4 V3 V5 V2
1  1  1  1  2  2
2  2  3  3  2  2
3  3  4  5  2  5

> but I need a method that will work regardless of k=number of rows of X. That
> is, the program must be able to accept any integer-valued matrix X for which
> each column is sorted, then permute columns accordingly.

This should do it:

> X[,do.call("order",split(X,row(X)))]
V1 V4 V3 V5 V2
1  1  1  1  2  2
2  2  3  3  2  2
3  3  4  5  2  5

(is there a better way of obtaining a list containing the rows of a
matrix?)

--
O__  ---- Peter Dalgaard             Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics     2200 Cph. N
(*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907

```