[R] Specifying the ordering of a vector

Duncan Murdoch murdoch.duncan at gmail.com
Mon Apr 9 16:28:20 CEST 2012


On 09/04/2012 9:58 AM, crmnaw wrote:
> Hi,
>
> Thanks for your reply. In the example I gave in the original post, your code
> works. But for others, it doesn't and I'm not sure why it works for some
> cases and not for others. For example:
>
> x<-c(0.04,0.07,0.20,0.35,0.55,0.70)
> order(x)
> [1] 1 2 3 4 5 6
>
> Let's say I want y to be in the order 1-2-5-3-6-4. So I do:
>
> y<-x[c(1,2,5,3,6,4)]
> y
> [1] 0.04 0.07 0.55 0.20 0.70 0.35
> order(y)
> [1] 1 2 4 6 3 5
>
> So, y isn't in the order I want it to be in. Any help that can be provided
> would be greatly appreciated.

Okay, I didn't understand what you meant.

You should think of the result of order(y) as a permutation to apply to 
y so that it is in sorted order.  That is,

y[order(y)]

will always be in sorted order.  So what you want is a permutation of x 
that will be put into sorted order by y[c(1,2,5,3,6,4)], i.e. you want 
the inverse of the permutation c(1,2,5,3,6,4).  Turns out that if you 
apply order to a permutation you get its inverse.  So what you want is

y <- x[order(c(1,2,5,3,6,4))]

Duncan Murdoch



More information about the R-help mailing list