为什么 order(order(x)) 等于 R 中的 rank(x)?

Why does order(order(x)) is equal to rank(x) in R?

在此post中声明order(order(x))rank(X)相同。

虽然一些实验证实了这一点...

#why is order(order(x)) == rank(x)?
x <- c(0.2, 0.5, 0.1)
x
## [1] 0.2 0.5 0.1
order(x)
## [1] 3 1 2
rank(x)
## [1] 2 3 1
order(order(x))
## [1] 2 3 1

我看不出如何证明这一点,更好的是,凭直觉。

相关:rank and order in R

首先看看由 1:10:

的排列形成的整数序列会发生什么
>  set.seed(123); x <- sample(10)
> x
 [1]  3  8  4  7  6  1 10  9  2  5
> order(x)
 [1]  6  9  1  3 10  5  4  2  8  7
> order(order(x))
 [1]  3  8  4  7  6  1 10  9  2  5
> rank(x)
 [1]  3  8  4  7  6  1 10  9  2  5

在这种情况下,order-操作是它自己的逆运算。由于 order 操作总是 returns 从 1 开始的序列,因此 order 的任何嵌套奇数应用程序都将给出相同的向量。

订购returns一个索引向量,可用于对原始向量进行排序。所以最小项的位置在第一个位置,第二个最小值的位置在 next, .... ,最后一项是最大项的位置。因此,当您再次对索引向量执行该操作时,第一项现在是最小索引的索引,依此类推......以及向量的等级。

我认为直觉是这样的:排名只是 "on which position would the item on the first, second, ... last position be if one sorted all items first" 的快捷方式。

因为我们讨论的是向量的位置,所以我们必须嵌套order函数。

如上例所示,从第一个位置的外部 order 函数开始,这个函数告诉我们最小索引在哪里 (= 2)。现在最小的索引恰好在你订购它时数字所在的位置(这就是 order 函数所做的),所以在上面的例子中,因为第一个数字(= 0.2)是第二大的一个在第二个位置。

所以这只是一种奇特的说法,如果您首先订购向量,第一个数字将排在第二位 - 这与 rank 函数给出的没什么不同。