簡體   English   中英

在R中以鎖步方式對兩個向量進行排序的最有效方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM