[R] re-ordering a vector by name
Sundar Dorai-Raj
sundar.dorai-raj at PDF.COM
Fri May 7 23:55:58 CEST 2004
Liaw, Andy wrote:
> Dear R-help,
>
> Let's say `x1' and `x2' are very long vectors (length=5e5, say) with same
> set of names but in different order. If I want to sort `x2' in the order of
> `x1', I would do
>
> x2[names(x1)]
>
> but the amount of time that takes is quite prohibitive! Does anyone have
> any suggestion on a more efficient way to do this?
>
> If the two vectors are exactly the same length (as I said above), sorting
> both by names would probably be the fastest. However, if the two vectors
> differ in length (and the names for the shorter one are a subset of names of
> the longer one) then that doesn't work...
>
> Best,
> Andy
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Hi Andy,
Using match seems to be *much* faster:
R> x1 <- 1:10000; names(x1) <- 1:10000
R> x2 <- 1:10000; names(x2) <- 10000:1
R> system.time(x3 <- x1[names(x2)])
[1] 1.88 0.00 1.88 NA NA
R> system.time(x4 <- x1[match(names(x1), names(x2))])
[1] 0.01 0.00 0.01 NA NA
R> all.equal(x3, x4)
[1] TRUE
R>
This should also work if x1 and x2 are of diffent lengths.
--sundar
More information about the R-help
mailing list