在R中, 我们要计算一组数据的秩, 可以使用rank函数.

rank(x, na.last = TRUE,
          ties.method = c("average", "first", "random", "max", "min"))

测试 : 

> x=array(rpois(35,lambda=10), dim=c(5,7))
> x
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]   14    9   10   16   10    9    8
[2,]    3   10   12    7   12   14   15
[3,]   10    8    8   13   11    5   16
[4,]    8    9   17   14    7    4    9
[5,]    7    7   10   13    9    6    8

排好顺序更容易看出rank是如何计算的

> sort(x)
 [1]  3  4  5  6  7  7  7  7  8  8  8  8  8  9  9  9  9  9 10 10 10 10 10 11 12
[26] 12 13 13 14 14 14 15 16 16 17

> rank(sort(x))
 [1]  1.0  2.0  3.0  4.0  6.5  6.5  6.5  6.5 11.0 11.0 11.0 11.0 11.0 16.0 16.0
[16] 16.0 16.0 16.0 21.0 21.0 21.0 21.0 21.0 24.0 25.5 25.5 27.5 27.5 30.0 30.0
[31] 30.0 32.0 33.5 33.5 35.0

默认是平均值方法.

> rank(sort(x), ties.method = "average")
 [1]  1.0  2.0  3.0  4.0  6.5  6.5  6.5  6.5 11.0 11.0 11.0 11.0 11.0 16.0 16.0
[16] 16.0 16.0 16.0 21.0 21.0 21.0 21.0 21.0 24.0 25.5 25.5 27.5 27.5 30.0 30.0
[31] 30.0 32.0 33.5 33.5 35.0

总共有35个值, 所以rank输出1到35的值, 但是为什么 7 7 7 7对应的是6.5呢?

我们看4个7实际上位置对应的是5,6,7,8 , 取平均值就是6.5.

那么接下来的5个8为什么得到的rank是11呢, 因为5个8的位置是9,10,11,12,13, 平均值是11.

这就是ties.method=average的算法.

接下来我们看看其他的.

min对应的是位置的最小值, 例如7777的位置是5,6,7,8, 取最小值5

88888的位置是9,10,11,12,13, 取最小值9

> rank(sort(x), ties.method = "min")
 [1]  1  2  3  4  5  5  5  5  9  9  9  9  9 14 14 14 14 14 19 19 19 19 19 24 25
[26] 25 27 27 29 29 29 32 33 33 35

max对应的是位置的最大值, 例如7777的位置是5,6,7,8, 取最大值8

88888的位置是9,10,11,12,13, 取最大值13

> rank(sort(x), ties.method = "max")
 [1]  1  2  3  4  8  8  8  8 13 13 13 13 13 18 18 18 18 18 23 23 23 23 23 24 26
[26] 26 28 28 31 31 31 32 34 34 35

first取的是就位置值, 所以输出的其实是连续的值.

> rank(sort(x), ties.method = "first")
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35

random取的是组内的随机值.  例如 7  8  5  6,  6  7  8  5

> rank(sort(x), ties.method = "random")
 [1]  1  2  3  4  7  8  5  6 12 11  9 10 13 18 16 15 14 17 22 23 21 19 20 24 25
[26] 26 28 27 29 31 30 32 34 33 35
> rank(sort(x), ties.method = "random")
 [1]  1  2  3  4  6  7  8  5 12 10 13  9 11 14 15 17 16 18 21 19 23 22 20 24 25
[26] 26 27 28 31 29 30 32 34 33 35

[参考]
1. 

help(rank)

rank                   package:base                    R Documentation

Sample Ranks

Description:

     Returns the sample ranks of the values in a vector.  Ties (i.e.,
     equal values) and missing values can be handled in several ways.

Usage:

     rank(x, na.last = TRUE,
          ties.method = c("average", "first", "random", "max", "min"))

Arguments:

       x: a numeric, complex, character or logical vector.

 na.last: for controlling the treatment of ‘NA’s.  If ‘TRUE’, missing
          values in the data are put last; if ‘FALSE’, they are put
          first; if ‘NA’, they are removed; if ‘"keep"’ they are kept
          with rank ‘NA’.

ties.method: a character string specifying how ties are treated, see
          ‘Details’; can be abbreviated.

Details:

     If all components are different (and no ‘NA’s), the ranks are well
     defined, with values in ‘seq_len(x)’.  With some values equal
     (called ‘ties’), the argument ‘ties.method’ determines the result
     at the corresponding indices.  The ‘"first"’ method results in a
     permutation with increasing values at each index set of ties.  The
     ‘"random"’ method puts these in random order whereas the default,
     ‘"average"’, replaces them by their mean, and ‘"max"’ and ‘"min"’
     replaces them by their maximum and minimum respectively, the
     latter being the typical sports ranking.

     ‘NA’ values are never considered to be equal: for ‘na.last = TRUE’
     and ‘na.last = FALSE’ they are given distinct ranks in the order
     in which they occur in ‘x’.

     *NB*: ‘rank’ is not itself generic but ‘xtfrm’ is, and
     ‘rank(xtfrm(x), ....)’ will have the desired result if there is a
     ‘xtfrm’ method.  Otherwise, ‘rank’ will make use of ‘==’, ‘>’,
     ‘is.na’ and extraction methods for classed objects, possibly
     rather slowly.

Value:

     A numeric vector of the same length as ‘x’ with names copied from
     ‘x’ (unless ‘na.last = NA’, when missing values are removed).  The
     vector is of integer type unless ‘x’ is a long vector or
     ‘ties.method = "average"’ when it is of double type (whether or
     not there are any ties).

References:

     Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S
     Language_.  Wadsworth & Brooks/Cole.

See Also:

     ‘order’ and ‘sort’.

Examples:

     (r1 <- rank(x1 <- c(3, 1, 4, 15, 92)))
     x2 <- c(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
     names(x2) <- letters[1:11]
     (r2 <- rank(x2)) # ties are averaged

     ## rank() is "idempotent": rank(rank(x)) == rank(x) :
     stopifnot(rank(r1) == r1, rank(r2) == r2)

     ## ranks without averaging
     rank(x2, ties.method= "first")  # first occurrence wins
     rank(x2, ties.method= "random") # ties broken at random
     rank(x2, ties.method= "random") # and again

     ## keep ties ties, no average
     (rma <- rank(x2, ties.method= "max"))  # as used classically
     (rmi <- rank(x2, ties.method= "min"))  # as in Sports
     stopifnot(rma + rmi == round(r2 + r2))
时间: 2024-09-30 04:23:40

在R中, 我们要计算一组数据的秩, 可以使用rank函数.的相关文章

在Excel中如何将一组数据绘制成图标?

  在Excel中如何将一组数据绘制成图标? 1.选定一组数据 2.点插入,这里有很多种图标,我们选择散点图,然后选择第一个示例图 3.选择图标,左击图表中数点,选择添加趋势线 4.这里选择线性,勾选显示公式及显示R平方值 5.设置坐标轴名称,选择布局,坐标轴标题,主要横坐标标题 6.输入标题名称,同法纵坐标操作 注意事项 选择趋势线时根据实际情况进行选择

《R的极客理想——高级开发篇 A》一一1.2 R语言中的数学计算

1.2 R语言中的数学计算 问题 如何用R语言进行数学计算? 引言 R语言是统计语言,生来就对数学有良好的支持,用R语言做数学的计算题特别方便.如果计算器中能嵌入R语言的计算函数,那么绝对是一种高科技产品.我真的把R语言当成我的计算器了!1.2.1 基本计算 R语言对数学计算有着非常好的支持,本节将完整介绍初等数学中的各种计算操作. 本节的系统环境是: Windows 7 64bit R: 3.1.1 x86_64-w64-mingw32/x64 (64-bit) 用R语言实现四则运算操作,包括

c-VC6.0++中如何对一组数据进行哈夫曼编码

问题描述 VC6.0++中如何对一组数据进行哈夫曼编码 C[ ]中有256个概率,将他们哈夫曼编码.然后做成个函数来调用 void Hoffuman(double* P,long* Output,long* Len) { } 解决方案 哈夫曼的c语言实现代码 解决方案二: (在VC++上调试通过)哈夫曼树编码上机实验 Google 查找:数组 C++ 哈夫曼编码 解决方案三: (在VC++上调试通过)哈夫曼树编码上机实验 Google 查找:数组 C++ 哈夫曼编码 解决方案四: http://

怎样判断一组数据中波动较大的一组点位置

问题描述 怎样判断一组数据中波动较大的一组点位置 一组数据怎样判断一组数据中波动比较大的点,找出他们的位置,如图中红色标记线所示 解决方案 对曲线求导,导数就是变化率.找绝对值大的地方.

JS从一组数据中找到指定的单条数据的方法_javascript技巧

下面小编给大家介绍基于js如何从一组数据中找到指定的单条数据.具体方法如下所示: 在一般情况下,我们会要求后端在列表的时候输出一堆列表的JSON数据给我们,然后我们把这堆数据循环,就能在前端上显示列表了. 而我们在内容页的时候,则要求输出一个内容页的JSON数据给我们,我们就可以做内容页了. 但是,有时候,数据并不是特别复杂,我们可能需要从列表的数据中指定其中的单条数据.怎么做呢? 标准答案,find方法 var json = [{"id":1,"name":&qu

《数据科学:R语言实现》—— 第1章 R中的函数 1.1 引言

第1章 R中的函数 1.1 引言 R语言是数据科学家的主流编程语言.基于著名的数据分析网站KDnuggets的民意测验,3项(2012年到2014年)的调查显示,R语言在数据分析.数据挖掘和数据科学领域中是最受欢迎的语言.对许多数据科学家来说,R语言不仅是一门编程语言,而且相关软件还提供了交互式的开发环境,支持运行各种数据分析任务. R语言在数据操作和分析方面有许多优势.下面是3个最显著的优势. 这些优势使得复杂的数据分析变得更加简单易行.对此,R语言用户都深信不疑.而且,R语言尤其适合基础用户

《数据科学:R语言实现》——第1章 R中的函数

第1章 R中的函数1.1 引言R语言是数据科学家的主流编程语言.基于著名的数据分析网站KDnuggets的民意测验,3项(2012年到2014年)的调查显示,R语言在数据分析.数据挖掘和数据科学领域中是最受欢迎的语言.对许多数据科学家来说,R语言不仅是一门编程语言,而且相关软件还提供了交互式的开发环境,支持运行各种数据分析任务.R语言在数据操作和分析方面有许多优势.下面是3个最显著的优势.开源并且免费:用户使用SAS或者SPSS需要购买使用许可.而用户使用R语言是免费的,并且可以方便地学习如何实

大数据技术中计算与数据的协作机制

大数据技术中计算与数据的协作机制 王鹏 黄焱 刘峰 安俊秀 大数据系统也被称为面向数据的高性能计算系统, 与传统高性能计算系统相似, 其计算和数据存储通常也是基于机群实现的分布式系统.以计算与数据的协作机制为主线分析对比了面向计算的高性能计算和面向数据的高性能计算, 指出正是计算与数据的协作机制决定着大数据系统的基本结构和性能.分布式文件系统与计算通过协助机制的融合是大数据系统实现自动并行化的基础.与面向计算的高性能计算系统不同, 大数据系统以切分数据并将计算向数据迁移作为协作机制的主要原则,

如何在 Excel 中执行公式计算

早于 Microsoft Excel 2002 的 Excel 版本 在早于 Excel 2002 的版本的 Excel,公式计算基于工作表的工作表,从 Excel 工作簿的 Sheet1 开始执行.在工作表 Sheet1 上完成计算后,Excel 会计算 Sheet2 上的公式直到计算工作簿的所有工作表上所有公式. 此进程工作正常,只要引用单元格和从属单元格处于同一工作表.如果引用单元格和从属单元格不同的工作表上,但跨工作表引用,这可能会导致一些问题. 例如,如果工作表 Sheet1 中的公式