完整指南:如何在 r 中使用 sort()、order() 和 rank()
人们经常混淆的 R 的三个函数是排序、排序和排名。
以下是这些函数之间的区别:
- sort()将按升序对向量进行排序
- order()将按排序顺序返回向量的每个元素的索引
- Rank()将为向量的每个元素分配一个排名(最小 = 1)
以下示例展示了如何在实践中使用这些函数。
示例:对向量使用 sort()、order() 和 Rank()
以下代码演示如何对四值向量使用sort() 、 order()和Rank()函数:
#createvector
x <- c(0, 20, 10, 15)
#sort vector
sort(s)
[1] 0 10 15 20
#order vector
order(s)
[1] 1 3 4 2
#rank vector
rank(x)
[1] 1 4 2 3
以下是每个函数的作用:
1. sort()函数只是将向量值按升序排序。
2. order()函数按排序顺序返回每个元素的索引。
- 如果你根据这些索引值对原始向量值进行排序,你将得到一个排序向量。
- 例如,order() 告诉我们首先将值放在索引位置1处——它在原始向量中是 0。
- 然后 order() 告诉我们将值放在索引位置3处——即原始向量中的 10。
- 然后 order() 告诉我们将值放在索引位置4处——即原始向量中的 15。
- 然后 order() 告诉我们将值放在索引位置2处——即原始向量中的 20。
- 最终结果是一个排序向量 – 0, 10, 15, 20。
3. Rank()函数为向量的每个元素分配一个等级,使用 1 表示最小值。
- 例如,Rank() 告诉我们原始向量的第一个值是最小的(rank = 1),而原始向量的第二个值是最大的(rank = 4)。
请注意,我们可以使用以下语法以相反的顺序使用sort() 、 order()和rank() :
#createvector
x <- c(0, 20, 10, 15)
#sort vector in decreasing order
sort(x, decreasing= TRUE )
[1] 20 15 10 0
#order vector in decreasing order
order(x, decreasing= TRUE )
[1] 2 4 3 1
#rank vector in reverse order (largest value = 1)
rank(-x)
[1] 4 1 3 2
请注意,这些结果与前面示例中产生的结果完全相反。
注意:如何使用 Rank() 函数处理关系
我们可以使用tie.method参数来指定在使用Rank()函数时应如何处理关系:
rank(x, ties. method = ' average ')
您可以使用以下选项之一来指定如何处理链接:
- average :(默认)为每个链接的项目分配平均排名(排名第 3 和第 4 的项目都将获得 3.5 的排名)
- first :将第一个链接元素分配给最低排名(排名第 3 和第 4 位置的元素将分别获得排名 3 和 4)
- min :将每个链接的项目分配到最低排名(排名第 3 和第 4 的项目都将获得排名 3)
- max :为每个链接的项目分配最高排名(排名第 3 和第 4 的项目都将获得排名 4)
- random :为每个并列元素分配一个随机排名(并列第三和第四位置的元素都可以接收任一排名)
根据您的情况,其中一种方法可能比其他方法更有意义。
其他资源
以下教程解释了如何在 R 中执行其他常见操作: