r语言rank降序_R语言rank函数详细解析

1.rank函数是什么

rank相关文档[1]可以译为"返回原数组(?)中各个元素排序(?)后的秩次(?)",表面上看确实可以得到次序,但对数组、排序、秩次交待不清。

2.rank函数使用情景

比如,在100米赛跑中,甲乙丙三人的成绩为6.8s, 8.1s, 7.2s,那么用rank函数排序获得名次:

> rank(t

[1] 1 3 2

再如,甲乙丙三人考试得分为74,92,85,用同样方法取得名次会适得其反。当然,我们可以认为执行

> rank(-(s

[1] 3 1 2

可以达到目的,但这并未改变rank函数的排序机制。

3.rank函数排序类型

rank(x, na.last = TRUE,

ties.method = c("average", "first", "random", "max", "min"))

> t

#同时对相应元素做好标记

> names(t)

通过以上方法进行排序,得出

Result

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

original

4

NaN

4

7

8

2

NaN

9

9

7

NaN

5

2

2

1

average

5.5

13.0

5.5

8.5

10.0

3.0

14.0

11.5

11.5

8.5

15.0

7.0

3.0

3.0

1.0

first

5

13

6

8

10

2

14

11

12

9

15

7

3

4

1

random (1)

6

13

5

9

10

2

14

11

12

8

15

7

3

4

1

random (2)

5

13

6

8

10

2

14

11

12

9

15

7

4

3

1

max

6

13

6

9

10

4

14

12

12

9

15

7

4

4

1

min

5

13

5

8

10

2

14

11

11

8

15

7

2

2

1

我们发现,标签"b","g","k"的次序并未发生改变,可推断ties.method作用在于处理非缺失值的顺序。

不妨参考rank的实现代码

function (x, na.last = TRUE, ties.method = c("average", "first",

"random", "max", "min"))

{

nas

nm

#names函数暗示了该方法的设计初衷是对一维数组即列向量进行排序,虽然x为矩阵也会得出结果,但nm的作用已经失效,结果不具有意义

ties.method

if (is.factor(x))

x

x

#average\min\max采用了相应的.Internal(rank(x, length(x), ties.method)),具体请见[说明2]

#first采用了sort.list(sort.list(x)),具体请见[说明3]

#random采用了sort.list(order(x, stats::runif(sum(!nas)))),具体请见[说明4]

y

length(x), ties.method)), first = sort.list(sort.list(x)),

random = sort.list(order(x, stats::runif(sum(!nas)))))

#下面是补全缺失值的次序的方法

#na.last = "keep",不处理缺失值,na.last = TRUE,后排序缺失值,na.last = FALSE,先排序缺失值。

if (!is.na(na.last) && any(nas)) {

yy

NAkeep

if (NAkeep || na.last) {

yy[!nas]

if (!NAkeep)

yy[nas]

}

else {

len

yy[!nas]

yy[nas]

}

y

names(y)

}

else names(y)

y

}

[说明1] 关于因子转整数

> f

> fac

> as.integer(fac)

[1] 3 4 2 1 1 2 3 5 6 6

由此可见: (1) 因子会作为字符串进行机械比较,排出次序。(2) 因子中任意两个缺失值地位(大小)相同。

实际问题中,因子为人为设定,故采用有序因子(ordered factor),消除机械转换的干扰。

> qulity

> names(qulity)

> q

> rank(q)

day1 day2 day3 day4 day5 day6 day7

6.0 3.5 6.0 3.5 1.5 6.0 1.5

[说明2]"average", "max", "min" 排序

> t

a b c d e f g h i j k l m n o

4 NaN 4 7 8 2 NaN 9 9 7 NaN 5 2 2 1

> rank(t, na.last = "keep", ties.method = "first")

a b c d e f g h i j k l m n o

5 NA 6 8 10 2 NA 11 12 9 NA 7 3 4 1

> rank(t, na.last = "keep", ties.method = "average")

a b c d e f g h i j k l m n o

5.5 NA 5.5 8.5 10.0 3.0 NA 11.5 11.5 8.5 NA 7.0 3.0 3.0 1.0

可以将"average"排序理解为先对数据进行"first"排序,即全部元素都有唯一且不同的次序。

如f, m, n 得分相同,但可按先后次序排成2, 3, 4, 但是f, m, n属于同一群体,故可以取该群体中的平均水平作为次序,使得分相同的元素地位相当。

故不难理解"max"排序是群体中的元素全部取群中最好的水平,这也是普遍采用的“并列排名”方法;

"min"排序是群体中的元素全部取群体中最差的水平,这样增大了不同等级的顺序差异。

[说明3] first = sort.list(sort.list(x))

对序列先按大小排序,大小相同的元素,从头至尾由小到大排序。

> x

a c d e f h i j l m n o

4 4 7 8 2 9 9 7 5 2 2 1

> sort.list(sort.list(x))

[1] 5 6 8 10 2 11 12 9 7 3 4 1

[说明4]random = sort.list(order(x, stats::runif(sum(!nas))))

weight = stats::runif(sum(!nas)) 为每个已知元素生成0-1之间随机数,作为“权重”序列weight

sort.list(order(x, weigth)) 依据随机的“权重”决定得分相同的元素的次序

不妨人为参与权重设计

a c d e f h i j l m n o

4 4 7 8 2 9 9 7 5 2 2 1

> weight = c(0.45, 0.55, 0.1, 0.1, 0.1, 0.55, 0.45, 0.1, 0.1, 0.3, 0.1, 0.1);

> sort.list(order(x,weight))

[1] 5 6 8 10 2 12 11 9 7 4 3 1

不难发现,a, c 得分均为4,但w(a) = 0.45 < w(c) = 0.55, 遵照小号在前,a 排在c 前面。h, j 刚好相反w(h) = 0.55 > w(j) = 0.45, j 排在h 前面。

d, j 得分,“权重”均相同,故按之前从头到尾递增顺序排列。

f, m, n 得分均为2, w(f) = w(n) = 0.1 < w(m) = 0.3, 排序结果为f < n < m, 由此可见,“权重”优先于“前后顺序”,这样做使得排序更加随机化,若序列存在大量得分相同的元素,一定程度克服了“前小后大”规则的约束,使排序结果更随机。

以上仅为说明随机排序的机制,实际应用中只能确定小数在前大数在后,并不能解释相同的数之间的顺序。

4.rank函数小结

rank(x, na.last = TRUE,

ties.method = c("average", "first", "random", "max", "min"))

(1) rank 函数是对一维度数组、向量x 进行排序。若x 为数值,则按照小数在线大数在后的原则进行排序,若x 为因子,则应参考[说明1]进行顺序因子设计。

P.S. 实际情况中,存在大量用二维表格描述的数据,比如行表示地点列表示时间的统计表,若进行排序,应先通过字符拼接的手段将表格转化为一维的向量,否则结果将失去意义。

(2) rank 将数据分为确定值与缺失值两种。缺失值可按先后排在确定值之间(na.last = FALSE), 也可排在之后(na.last = TRUE), 也可保留,不参与排序(na.last = "keep").

(3) "first" 是最基本的排序,小数在前大数在后,相同元素先者在前后者在后。

"max" 是相同元素都取该组中最好的水平,即通常所讲的并列排序。

"min" 是相同元素都取该组中最差的水平,可以增大序列的等级差异。

"average" 是相同元素都取该组中的平均水平,该水平可能是个小数。

"random" 是相同元素随机编排次序,避免了“先到先得”,“权重”优于“先后顺序”的机制增大了随机的程度。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机时代 英语,雅思8分范文:计算机时代教师角色 【出国英语】

雅思8分范文&#xff1a;计算机时代教师角色 【出国英语】The computer are widely used in education and some people think teacher are not play important role in the classroom .to what extend do you agree? (agree/disagree)医学教育网nowadays, the computer is ra…

C# 列出进程以及详细信息

建立一个listBox将进程名称遍历进去 this.listBox1.Items.Clear();Process[] MyProcessesProcess.GetProcesses();foreach(Process MyProcess in MyProcesses){this.listBox1.Items.Add(MyProcess.ProcessName);}this.listBox1.SelectedIndex0; 选中listBox里面的项后将进程详…

Nginx配置文件(nginx.conf)配置详解

Nginx的配置文件nginx.conf配置详解如下&#xff1a; user nginx nginx ; Nginx用户及组&#xff1a;用户 组。window下不指定 worker_processes 8; 工作进程&#xff1a;数目。根据硬件调整&#xff0c;通常等于CPU数量或者2倍于CPU。 error_log logs/error.log; error_log…

vue 怎么清空依赖_vuejs如何在把对象所有属性清空?

删除该轮播图加入该新轮播图var homepageConfig [{type: 1,itemList: [{imageUrl: "https://static.segmentfault.com/v-59311a93/global/img/logo-b.svg?v001",url: "1.html"},{imageUrl: "https://static.segmentfault.com/v-59311a93/global/img…

web编程 模块1 html,PYcore python programming笔记C20 Web编程

&#xfeff;&#xfeff;C20 Web编程20.1介绍C/S架构 服务端永远运行HTTP协议 &#xff1a;无状态协议&#xff0c;不跟踪一个客户端到另一个客户端的请求&#xff0c;但会被处理为独立的服务请求使用URL和cookie保存信息URL 统一资源定位器URI 统一资源标识器URL是URI的一…

java 根据类路径获取类_Java类加载器

类加载器Java程序可以通过类加载器来达到通过一个类的全限定类名来获取该类的二进制字节流。类与类加载器对于任意一个类&#xff0c;都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性&#xff0c;每一个类加载器都拥有一个独立的类名称空间。即时这…

rsync 服务快速部署手册

一、rsync服务端安装 1、查看rsync安装包 # rpm -qa rsyncrsync-3.0.6-12.el6.x86_642、安装rsync 系统默认都会安装rsync软件包的&#xff0c;如果查看发现没有安装&#xff0c;执行yum安装即可# yum install rsync -y3、添加rsync服务的用户&#xff0c;管理本地目录的 # use…

C# 用户控件事件

当用户控件中btnNeed按钮被点击时&#xff0c;激活本用户控件的BtnClick事件&#xff0c;此事件可以在页面中捕获。-----------用户控件---------------protected void btnNeed_Click(object sender, EventArgs e) { if (BtnClick ! null) Bt…

html不支持元素video,Html5中的Video元素使用方法

现在互联网视频大都使用Flash来实现。但是不同的浏览器可能使用不同的插件。在HTML5中则提供了一个统一的方式来展示视频内容。HTML5 video在Internet Explorer 9, Firefox, Opera, Chrome, 和Safari都支持。IE8及其更早的浏览器不支持。代码如下Your browser does not support…

Matlab命令大全

MATLAB命令大全管理命令和函数help 在线帮助文件doc 装入超文本说明what M、MAT、MEX文件的目录列表type 列出M文件lookfor 通过help条目搜索关键字which 定位函数和文件Demo 运行演示程序Path 控制MATLAB的搜索路径管理变量和工作空间…

千牛通知栏常驻是什么意思_店铺运营|内贸1688 店铺真正的权重是什么?

想必大家都听说过店铺权重/单品权重/客户标签 这些名词。那到底是怎么操作的呢&#xff1f; 以下是简单的大纲&#xff1a;店铺权重的拆解拆分里面的小指标&#xff0c;看看我们有没有操作的空间单品的权重拆分里面的小指标&#xff0c;有哪些因素是我们能够控制的&#xff1f;…

初入网络系列笔记(6)TFTP协议

一、借鉴说明&#xff0c;本博文借鉴以下博文 1.锤子&#xff0c;FTP协议&#xff0c;http://www.cnblogs.com/loadrunner/archive/2008/01/09/1032264.html 2.sunada&#xff0c;FTP协议及工作原理详解&#xff0c;http://www.cnblogs.com/sunada2005/articles/2781712.html 3…

计算机科学与技术班级口号八字,班级的八字口号

第1篇&#xff1a;初中班级八字口号1.拼搏奋进、永远进步2.全民健身、利国利民3.健康第一、从我做起4.零二零二&#xff0c;独一无二5.零三零三&#xff0c;奋勇争先6.四班四班&#xff0c;锐不可当7.展现自我、争创新高8.奥运精神、永驻我心9.强身健体、立志成材10.顽强拼搏、…

Prolog学习笔记100805

//love(zhangxueyou,wanfei). 爱(张学友,王菲). “张学友爱王菲”。prolog是不允许使用除了基本字符以外字符的。最末尾的“.”一定不能掉&#xff0c;它表示一个句子结束。 //“:-”在prolog中表示“如果”的意思&#xff0c;我们使用它来定义规则。lovers(X,Y):-love(X,Y),lo…

charts引入icon图片_v-charts 踩坑之路

最近要做一个大屏 没有使用echarts 使用了更适合vue封装的v-charts组件库&#xff0c;第一次使用 期间踩了不少坑&#xff0c;记录下来和大家分享一下。废话不多说 开始搞起来&#xff01;一、安装 引入什么的大家自行百度 百度一下&#xff0c;你就知道​www.baidu.com二、2.1…

今天星期一在家值班

只盼着不要出问题 转载于:https://www.cnblogs.com/bkchengzheng/p/6196193.html

高一学生计算机知识现状分析,关于高中信息技术课教学现状的思考

一、 当前信息技术教学现状的分析(一)课程开设的现状高中信息技术课已经开展好多年了&#xff0c;总的来说&#xff0c;越来越被教育部门重视了&#xff0c;从刚开始的仅仅要求学生认识计算机&#xff0c;到学习一些简单处理软件&#xff0c;到把信息技术整合成一门象样的…

魔兽争霸 地图编辑器 常用属性【原创】

物体单位 技能-英雄&#xff1a;选择英雄的技能文本-名字&#xff1a;英雄的名字状态-初始力量、敏捷、智力&#xff1a;初始三围状态-初始属性&#xff1a;初始英雄类别&#xff08;力量、敏捷、智力&#xff09;状态-每等级所加力量、敏捷、智力&#xff1a;每升一级增加三围…

pla3d打印材料密度_模具粉必看!总有一款粉末能解决您的问题-毅速3D打印研制...

金属3D打印最常见的形式是粉末床熔融。这类工艺使用热源&#xff08;SLM工艺使用激光&#xff0c;EBM工艺使用电子束&#xff09;逐点将粉末颗粒熔融在一起&#xff0c;逐层加工至物件完成。在金属3D打印过程中&#xff0c;可能存在很多设备操作者试图避免的问题&#xff0c;包…