作者: 宋星云 中国科学院心理研究所硕士,R语言爱好者。已有多年数据分析与R语言的实战经验,毕业后将从事数据分析工作。
个人公众号:星云实验室
对给定的样本随机排序、随机抽样、分层抽样在日常生活工作中非常常见,本文将以若干案例来介绍实现这几种常见需求的简单解决方案。
自带的 sample 函数是实现随机抽样最基础的函数,以此为基础,dplyr中的sample_n与sample_frac,以及doBy中的sampleBy函数能够实现更复杂的一些需求
案例1 皇帝的夜生活
对序列进行随机排序(洗牌)
皇帝有7个老婆,他想请作为内务总管的你帮他安排一下他的夜生活。他希望能够雨露沾均,一周七天没有人失宠也没有人得到过多的恩宠,而且希望能够顺序随机。
在这里,问题相当于对1~7七个数(一个向量)进行洗牌,使用sample函数即可很好的解决问题:
P.S. 如果皇帝无所谓雨露沾均,那么问题就相当于对1~7七个数进行 有放回的 七次抽样:
案例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行
解决方案为:
sampleBy(formula = ~DiYu+HuKou, frac = .052, #因为1000*5% /4 =12.5 不是整数,因此向上调了一点 data = dt)
我们看一下结果:
可以看见,地域(DiYu)和户口(HuKou)的每一个处理下面均随机抽取了13个观测值。实现了分层随机抽样。
最后,留一个练习题~
练习题 给秀女们排座位
过年了,皇帝想邀请通过初试的40名秀女来宫中看春晚,宫里正好共有40个座位,8排5座。因为场地是平面的,皇帝希望身高高的秀女坐在后面,身高矮的坐在前面,但是又希望座位尽量随机。于是,你按照身高以矮到高将40人划分为8组,每一组占一排,在每一组内随机安排座位。那么,怎样实现呢?P.S. 每个秀女是数据框中的一行观测值,包含姓名、身高、出生地等变量,按照身高人为的分组为GROUP,需要对每个秀女生成一个新的变量“座位号”,满足上述条件
往期精彩:
公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
回复 Python 1小时破冰入门
回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法常用数据挖掘算法
本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上所述就是小编给大家介绍的《【R语言实用技巧】随机排序、随机抽样与分层抽样》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hive 的数据抽样
- R语言进行随机抽样sampling
- CSS实用技巧
- CSS实用技巧干货
- Python实用技巧,你不知道的7个好玩的Python技巧
- Kubernetes 实用技巧: 使用 ksniff 抓包
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Is Parallel Programming Hard, And, If So, What Can You Do About
Paul E. McKenney
The purpose of this book is to help you understand how to program shared-memory parallel machines without risking your sanity.1 By describing the algorithms and designs that have worked well in the pa......一起来看看 《Is Parallel Programming Hard, And, If So, What Can You Do About 》 这本书的介绍吧!