Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Most efficient way to sort two vectors in lockstep in R?

Tags:

sorting

r

What's the most efficient way to sort two vectors in lockstep in R? The first vector should be sorted in ascending order and the second should be reordered in lockstep such that elements with corresponding indices before the sort still have corresponding indices after the sort. For example:

foo <- c(1,3,2, 5,4)
bar <- c(2,6,4,10,8)
sort2(foo, bar)

# foo == c(1,2,3,4, 5)
# bar == c(2,4,6,8,10)

Note: Efficiency is an absolute must here as I am trying to use this as the basis for creating an O(N log N) implementation of Kendall's Tau to submit as a patch. I'd like to avoid writing my own special function in C to do this, but would be willing to if it can't be done efficiently within R.

like image 300
dsimcha Avatar asked Feb 21 '10 23:02

dsimcha


1 Answers

Not sure I understand but is this use of order() what you want:

R> foo <- c(1,3,2, 5,4)
R> bar <- c(2,6,4,10,8)
R> fooind <- order(foo)   # index of ordered 
R> foo[fooind]
[1] 1 2 3 4 5
R> bar[fooind]
[1]  2  4  6  8 10
R> 
like image 65
Dirk Eddelbuettel Avatar answered Nov 15 '22 05:11

Dirk Eddelbuettel