前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >巧用R中的各种排名窗口函数

巧用R中的各种排名窗口函数

作者头像
1480
发布2019-05-21 23:18:33
3.5K0
发布2019-05-21 23:18:33
举报
文章被收录于专栏:数据分析1480

前言

在sql中巧用窗口函数可以解决很多复杂的问题,窗口函数有4种函数类型:排名函数、偏移函数、聚合函数和分布函数,详细介绍可以浏览:

【窗口函数】第一弹:窗口函数简介

【窗口函数】第二弹:排名函数和偏移函数

【窗口函数】第三弹:聚合函数和分布函数

R语言中,也有与sql中一一对应的4种类型的窗口函数,除了聚合函数有点差异之外,其他3种类型的窗口函数完全一致,而且在R中使用管道函数书写窗口函数代码,比sql中更容易理解。分4部分讲一下:排名函数、偏移函数、聚合函数和分布函数,本节介绍一下R语言中的排名函数。

函数对比

SQL中窗口函数语句中over语句中两个关键词:partition by和order by,R语言中也有与之一一对应的函数:

SQL中排名函数有4个:row_number()、rank()、dense_rank()和ntile(),R语言中也有4个排名函数与之对应,函数名也几乎相同:

函数使用

数据使用之前的数据:

1 row_number函数

R语言中的row_number函数与sql中的row_number函数相同,对group_by后面字段进行分组,按照order_by后面字段排序,生成一个连续不重复的编码,对每个客户按照购买时间升序排序编码:

输出结果与sql输出结果有一点不同:R语言中输出结果的顺序与原始数据的顺序一致,而sql中是按照购买时间的先后顺序输出的,若想输出结果与sql中一致,则:

之前说过,使用管道函数连接的语句执行顺序和书写顺序一致,上面语句可以理解为:1、使用group_by对指定的user_no字段分组;2、使用order_by函数对组内数据按照购买时间升序排列编码,增加一个新字段;3、使用arrange对指定的字段user_no和buy_date排序。

2 min_rank函数

R语言中的min_rank函数与sql中的rank函数相同,row_number函数对order_by后面字段相同的记录编码是不同的,min_rank就是解决这个问题,对相同的记录编码相同:

同样为了得到与sql中相同的输出结果,则:

3 dense_rank函数

R语言中的dense_rank函数与sql中的dense_rank函数相同,min_rank编码出现跳号现象,而dense_rank函数编码不会跳号:

同样得到与sql中相同的输出结果:

4 ntile函数

R语言中的ntile函数与sql中的ntile函数相同,把每一组分成几块,块数由参数n决定:

同样为了得到与sql中输出结果一致:

总结

简单介绍R语言中4个排名窗口函数,函数名几乎与sql中的4个排名窗口函数一样(除了min_rank与rank),但R语言的排名窗口函数的输出结果与sql中的输出结果有点不同:R语言的数据结果不改变原来的数据顺序,而sql中的输出结果改变了原数据的顺序,若想得到与sql中一样的输出结果,在R中使用arrange对相应的字段进行排序即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档