vlambda博客
学习文章列表

R语言如何实现数据抽样?









读取数据集。这里以一个简单的数据集为例。

stu_data=data.frame(group=c("1班","2班","2班","1班","1班","2班","1班","2班"),age=c(">18","16-18","<16","16-18","16-18","16-18","16-18","16-18"),sex=c("F","M","F","F","M","M","F","M"),score=c(100,92,91,88,81,80,75,66))

stu_data

2  无放回的简单随机抽样。

在对数据集进行抽取的过程中,一般先随机抽取行号,然后根据行号找到对应的数据集。

例如:

sample1=sample(nrow(stu_data),6,replace=F) #从stu_data总的观测样本个数中抽取6个。

sample1 #显示抽样结果

data1=stu_data[sample1,]   #得到这6个数据集。

data1

R语言如何实现数据抽样?

3  有放回随机抽样。

sample2=sample(nrow(stu_data),6,replace=T) #有放回随机抽样

data2=stu_data[sample2,]  #得到抽样数据集

data2 #查看抽样数据集

由于是有放回,所以存在部分重复样本。重复的数据会有".1"、".2"等后缀标记,显示这条数据是重复抽了几次。

R语言如何实现数据抽样?

4  分层抽样。利用sampling包中的strata函数进行分层抽样,然后利用getdata获取抽样样本集。

 sample3=strata(stu_data,stratanames="group",size=c(1,3),method="srswor") #按照group变量进行分层抽样,分别在1班、2班中抽取1和3个样本,抽样方式为无放回抽样。

sample3  #查看抽样结果

getdata(stu_data,sample3)   #显示分层抽样的数据集


R语言如何实现数据抽样?

5  各层概率不相等的系统抽样。

sample4=strata(stu_data,stratanames="group",size=c(1,3),method="systematic",pik=stu_data$score) #分层抽样中method选择系统抽样,pik为各层中个样本的抽样概率

sample4  #查看抽样结果

getdata(stu_data,sample4)  #获取抽样数据集

从结果中可以看出,score取值越大的,被抽到的概率越高。

6  利用cluster函数进行整群抽样。当群内样本差异大,群间差异较小时,可考虑整群抽样。例如抽取某一个班级的成绩数据集。

sample5=cluster(stu_data,clustername="group",size=1,method="srswor",description=TRUE)  #以group作为划分群的变量,抽取群数size为1,抽样方法是无放回抽样,description显示抽样时各群基本信息。

sample5 #查看抽样结果

getdata(stu_data,sample5) #得到抽样数据集