如何在R中使用sort()、order()和rank()

932 阅读3分钟

R中人们经常混淆的三个函数是sortorderrank

下面是这些函数之间的区别:

  • 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

下面是每个函数的作用:

  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():

#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中执行其他常见操作:

如何在R中按多列排序
如何在R中按日期对数据框排序
如何在R中计算百分位数排名