[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