R中人们经常混淆的三个函数是sort、order和rank。
下面是这些函数之间的区别:
- sort()将按升序对一个向量进行排序
- order()将按照排序的顺序返回向量中每个元素的索引
- rank()将为向量中的每个元素分配一个等级(最小的=1)
下面的例子显示了如何在实践中使用这些函数。
例子。在向量中使用 sort()、order()和 rank()
下面的代码显示了如何对一个有四个值的向量使用sort()、**order()**和 **rank()**函数:
#create vector
x <- c(0, 20, 10, 15)
#sort vector
sort(x)
[1] 0 10 15 20
#order vector
order(x)
[1] 1 3 4 2
#rank vector
rank(x)
[1] 1 4 2 3
下面是每个函数的作用:
- 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():
#create vector
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()函数处理并列关系
我们可以使用ties.method参数来指定在使用rank()函数时应该如何处理平局:
rank(x, ties.method='average')
你可以使用以下选项之一来指定如何处理平局:
- average: (默认) 给每个并列的元素分配平均等级(排在第3和第4位的元素都将得到3.5的等级)
- 第一:将第一个并列的元素分配到最低等级(排在第3和第4位的元素将分别得到3和4的等级)
- min: 将每个并列的元素分配到最低的等级(排在第3和第4位的元素都会得到一个等级3)
- 最大:将每个并列的元素分配到最高等级(排在第3和第4位的元素都会得到4的等级)
- 随机:给每个并列的元素分配一个随机的等级(并列在第3和第4位的任何一个元素都可以得到任何一个等级)。
根据你的情况,这些方法中的一个可能比其他方法更有意义。
其他资源
下面的教程解释了如何在R中执行其他常见操作: