【R语言实用技巧】随机排序、随机抽样与分层抽样

栏目: R语言 · 发布时间: 5年前

【R语言实用技巧】随机 <a href='https://www.codercto.com/topics/21904.html'>排序</a> 、随机抽样与分层抽样

作者: 宋星云 中国科学院心理研究所硕士,R语言爱好者。已有多年数据分析与R语言的实战经验,毕业后将从事数据分析工作。

个人公众号:星云实验室

对给定的样本随机排序、随机抽样、分层抽样在日常生活工作中非常常见,本文将以若干案例来介绍实现这几种常见需求的简单解决方案。

自带的 sample 函数是实现随机抽样最基础的函数,以此为基础,dplyr中的sample_n与sample_frac,以及doBy中的sampleBy函数能够实现更复杂的一些需求

案例1 皇帝的夜生活

对序列进行随机排序(洗牌)

皇帝有7个老婆,他想请作为内务总管的你帮他安排一下他的夜生活。他希望能够雨露沾均,一周七天没有人失宠也没有人得到过多的恩宠,而且希望能够顺序随机。

在这里,问题相当于对1~7七个数(一个向量)进行洗牌,使用sample函数即可很好的解决问题:

P.S. 如果皇帝无所谓雨露沾均,那么问题就相当于对1~7七个数进行 有放回的 七次抽样:

【R语言实用技巧】随机排序、随机抽样与分层抽样

案例2 皇帝为什么找不到老婆呢?

对数据框随机抽样

每年的选秀结束了,但是皇帝没有选到心仪的人,于是怀疑手下是否有舞弊。于是让人整理了一份全部参加选秀的1000个人选的名单(dt),名单包括秀女的姓名、年龄、家庭住址、手机号等。然后,皇帝拜托作为内务总管的你去走一下基层,从中随机抽取5%的人上门或者打电话了解一下情况。

在这里,问题相当于从这个有1000行的数据框中随机抽取5%,即50行的数据。 dplyr中的sample_n与sample_frac函数实现对数据框的观测随机抽样与随机排序。其中,sample_n是按照个数取样;而sample_frac是按照比例取样。

sample_n(dt, 50)   #从dt中随机取50个观测值
sample_frac(dt, 0.05) #从dt中随机取5%的观测值

案例3 皇帝为什么找不到老婆呢?

分层随机抽样接案例2. 作为内务总管的你了解到,选秀主考官似乎有点地域歧视、户口歧视,对来自南方与北方,对出身农村和城镇的秀女有着不同的标准,在出题上也有些为难人。因此,你决定从南方与北方、从农村和城镇各随机抽取相应比例的秀女进行调查。

在这里,问题相当于要完成一次分层的随机抽样,doBy包中的sampleBy函数能够很好的实现分层抽样。sampleBy的用法参考如下:

sampleBy(formula, frac = 0.1, replace = FALSE, data = parent.frame(),  systematic = FALSE)

和doBy的其他函数一样,均需要使用formula来表示其中的关系。其仅含frac参数,需要按比例进行抽样

下图是假设的原始dt数据框,共有1000行

【R语言实用技巧】随机排序、随机抽样与分层抽样

解决方案为:

sampleBy(formula = ~DiYu+HuKou, 
                 frac = .052,  #因为1000*5% /4 =12.5 不是整数,因此向上调了一点
                 data = dt)

我们看一下结果:

【R语言实用技巧】随机排序、随机抽样与分层抽样

可以看见,地域(DiYu)和户口(HuKou)的每一个处理下面均随机抽取了13个观测值。实现了分层随机抽样。

【R语言实用技巧】随机排序、随机抽样与分层抽样

最后,留一个练习题~

练习题 给秀女们排座位

过年了,皇帝想邀请通过初试的40名秀女来宫中看春晚,宫里正好共有40个座位,8排5座。因为场地是平面的,皇帝希望身高高的秀女坐在后面,身高矮的坐在前面,但是又希望座位尽量随机。于是,你按照身高以矮到高将40人划分为8组,每一组占一排,在每一组内随机安排座位。那么,怎样实现呢?P.S. 每个秀女是数据框中的一行观测值,包含姓名、身高、出生地等变量,按照身高人为的分组为GROUP,需要对每个秀女生成一个新的变量“座位号”,满足上述条件

往期精彩:

【R语言实用技巧】随机排序、随机抽样与分层抽样

公众号后台回复关键字即可学习

回复  爬虫             爬虫三大案例实战

回复  Python        1小时破冰入门

回复  数据挖掘      R语言入门及数据挖掘

回复  人工智能      三个月入门人工智能

回复  数据分析师   数据分析师成长之路 

回复  机器学习      机器学习的商业应用

回复  数据科学      数据科学实战

回复  常用算法     

常用数据挖掘算法

本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上所述就是小编给大家介绍的《【R语言实用技巧】随机排序、随机抽样与分层抽样》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Traction: A Startup Guide to Getting Customers

Traction: A Startup Guide to Getting Customers

Gabriel Weinberg、Justin Mares / S-curves Publishing / 2014-8-25 / USD 14.99

Most startups end in failure. Almost every failed startup has a product. What failed startups don't have is traction -- real customer growth. This book introduces startup founders and employees to......一起来看看 《Traction: A Startup Guide to Getting Customers》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码