按特定(自定义)顺序排序整数向量

yuk*_*yuk 8 sorting r vector

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

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

[1] 1 3 1 2 2 1 3 2 3 2
Run Code Online (Sandbox Code Playgroud)

如果我排序x我会得到

sort(x)
[1] 1 1 1 2 2 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)

但我首先需要2s,然后是1s,然后是3s.

[1] 2 2 2 2 1 1 1 3 3 3
Run Code Online (Sandbox Code Playgroud)

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

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

jor*_*ran 8

一个有点复杂的选择:

x[order(factor(x,levels = c(2,1,3)))]
Run Code Online (Sandbox Code Playgroud)

或者显然,order只是对指数的要求.


Jam*_*mes 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
Run Code Online (Sandbox Code Playgroud)