美文网首页数据-R语言-图表-决策-Linux-PythonR小推车
【R语言实用技巧】随机排序、随机抽样与分层抽样

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

作者: 天善智能 | 来源:发表于2019-02-18 10:50 被阅读1次

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:宋星云中国科学院心理研究所硕士,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,需要对每个秀女生成一个新的变量“座位号”,满足上述条件

往期精彩:

【R语言实用技巧】类别变量的顺序自定义设置

R语言中文社区2018年终文章整理(作者篇)

R语言中文社区2018年终文章整理(类型篇)

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

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

回复 Python       1小时破冰入门

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

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

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

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

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

回复 常用算法     常用数据挖掘算法

相关文章

网友评论

    本文标题:【R语言实用技巧】随机排序、随机抽样与分层抽样

    本文链接:https://www.haomeiwen.com/subject/fxzoeqtx.html