[英]Most efficient way to sort two vectors in lockstep in 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)
注意:效率是絕對必須的,因為我試圖將此作為創建Kendall的Tau的O(N log N)實現的基礎,以作為補丁提交。 我想避免在C中編寫我自己的特殊功能來做這件事,但是如果它不能在R內有效地完成,我願意。
不確定我理解但是這是使用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>
我不確定在X先排序的情況下接受的答案是否正確,然后Y按(排序)X的索引排序,因為如果X中有重復值,Y並不總是按經典排序'按x,y'排序。 例如:
> 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
Y 由 X的新的順序排列,而不是步調一致,作為X指標不是一切都改變了。 一個簡單的功能,需要做OP:
> sort.xy <- function(x,y)
+ {
+ df.xy <- data.frame(x,y)
+ df.xy[ order(df.xy[,1], df.xy[,2]), ]
+ }
正在使用:
> c(sort.xy(x,y))
$x
[1] 1 2 2 2 3
$y
[1] 1 2 3 4 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.