在R中以锁步方式对两个向量进行排序的最有效方法是什么?

dsi*_*cha 5 sorting r

在R中以锁步方式对两个向量进行排序的最有效方法是什么?第一个向量应按升序排序,第二个向量应以锁步方式重新排序,以使排序前具有相应索引的元素在排序后仍具有相应的索引.例如:

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)
Run Code Online (Sandbox Code Playgroud)

注意:效率是绝对必须的,因为我试图将此作为创建Kendall的Tau的O(N log N)实现的基础,以作为补丁提交.我想避免在C中编写我自己的特殊功能来执行此操作,但如果在R内无法有效完成,我愿意这样做.

Dir*_*tel 8

不确定我理解但是这order()是你想要的用途:

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> 
Run Code Online (Sandbox Code Playgroud)

  • 这*是*最有效的方式.R不会修改对象 - 如果你查看`sort.default`的源代码,你会看到它在内部使用`order()`. (4认同)