8

我有一个整数向量,比如说从 1 到 3(可以更多):

x <- sample(1:3, 10, replace=T)

[1] 1 3 1 2 2 1 3 2 3 2

如果我排序x,我会得到

sort(x)
[1] 1 1 1 2 2 2 2 3 3 3

但我需要先 2 秒,然后是 1 秒,然后是 3 秒。

[1] 2 2 2 2 1 1 1 3 3 3

那么,如果我有一个 vector y = c(2, 1, 3),我如何使用它来排序?

实际上我不需要值本身,而是原始向量中排序值的索引,正如我从order函数中得到的那样。

4

2 回答 2

8

一个有点复杂的选项:

x[order(factor(x,levels = c(2,1,3)))]

或者显然,只是order对索引的调用。

于 2013-07-19T17:18:41.260 回答
7

值的简单重新映射有效:

x <- sample(1:3, 10, replace=T)
x
 [1] 2 3 1 1 3 2 2 3 3 2
order(c(2,1,3)[x])
 [1]  1  6  7 10  3  4  2  5  8  9
于 2013-07-19T17:24:41.450 回答