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

______________________________________________
[EMAIL PROTECTED] 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

______________________________________________
[EMAIL PROTECTED] 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

Reply via email to