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

Sorting 在R中对两个向量进行锁步排序的最有效方法是什么?,sorting,r,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) > x <- c(3,2,2,2,1) > y <- c(5,4,3,2,1) > x

对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)
> x <- c(3,2,2,2,1)
> y <- c(5,4,3,2,1)
> xind <- order(x)
> x[xind]
[1] 1 2 2 2 3
> y[xind]
[1] 1 4 3 2 5

foo我不太明白,但这是使用
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> 
R>foo bar fooind foo[fooind]
[1] 1 2 3 4 5
R> 酒吧
[1]  2  4  6  8 10
R>

我不确定接受的答案是否正确,如果X先排序,然后Y按(排序的)X的索引排序,因为如果X中有重复的值,Y并不总是按经典的“按X,Y排序”方式排序。例如:

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)
> x <- c(3,2,2,2,1)
> y <- c(5,4,3,2,1)
> xind <- order(x)
> x[xind]
[1] 1 2 2 2 3
> y[xind]
[1] 1 4 3 2 5
谢谢这不是最有效的方法(需要额外的间接处理),但绝对足够好。这是最有效的方法。R不会在适当的位置修改对象-如果您查看
sort.default
的源代码,您会看到它在内部使用
order()