首先看一下由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
操作总是返回以1开始的序列,因此任何嵌套的奇数次应用order
都会给出相同的向量。
order
返回一个索引向量,可用于对原始向量进行排序。因此,最小项的位置位于第一个位置,第二个最小值的位置紧随其后,......,而最后一项则是最大项的位置。因此,当您再次对索引向量执行该操作时,第一项现在是最小索引的索引,依此类推......并且是向量的等级。我认为直觉是这样的:排名只是“如果首先对所有项目进行排序,第一个、第二个、...最后一个位置上的项目将在哪个位置上”的快捷方式。
因为我们正在谈论向量的位置的位置,所以我们必须嵌套order
函数。
就像上面的例子一样,从第一个位置的外部order
函数开始,它告诉我们最小索引在哪里(= 2)。现在,最小索引恰好位于数字排序后的位置(这就是order
函数的作用),因此在上面的示例中,因为第一个数字(= 0.2)是第二大的数字,所以它在第二个位置上。
因此,这只是一种花哨的说法,即如果您首先对向量进行排序,则第一个数字将位于第二个位置 - 这正是rank
函数提供的内容。
ties.method = "first"
时,rank
实际上使用的是sort.list(sort.list(x))
。 - Roland