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

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

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

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


数字总是从1到N吗? - Arun
2个回答

8

一个有点复杂的选项:

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

当然,仅仅调用“order”函数来获取索引即可。

谢谢!非常好用。我认为as.integer的调用是不必要的。对吗? - yuk

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接