R语言进行随机抽样、分层抽样和系统抽样

最近在进行一项哨点监测项目,需要对监测点乡镇、学校和医疗机构分别进行人口规模排序的系统抽样、学校类别的分层抽样以及随机抽样,对比spss、excel后发现R语言中的sampling包能够得到较好的实现,直接上代码。

原始抽样框如下,分别存放与excel不同的sheet中:

R语言进行随机抽样、分层抽样和系统抽样_第1张图片

代码部分:

library(readxl)
library(dplyr)
library(sampling)
dt<-list()
for(i in 1:3){
  dt[[i]]<-read_excel("xx抽样框.xlsx",sheet=i)
}
xz<-dt[[1]]%>%data.frame()%>%arrange(desc(人口数))
xx<-dt[[2]]%>%data.frame()
yy<-dt[[3]]%>%data.frame()
###人口规模排序的系统随机抽样(抽取2两个乡镇)###
n<-2
N<-nrow(xz)
if(N%%2==1){
  set.seed(111)
  s1<-srswor(1,N)
  xz<-xz[-getdata(xz,s1)$ID_unit,] ##该循环用来判断总规模是否为偶数,如不为抽数,随机抽除1个##
}else{
  xz<-xz
}
p<-rep(n/N,N)
set.seed(111) ###设置随机种子便于后期核验###
sxz<-UPsystematic(p)
xz.result<-getdata(xz,sxz)

###学校类型的分层随机抽样(每层各抽取1个)###
set.seed(111)
sxx<-strata(xx[order(xx$层别),],stratanames = "层别",size=c(1,1),method = "srswor")
xx.result<-getdata(xx,sxx)

###医院简单随机抽样###
n1<-1
N1<-nrow(yy)
set.seed(111)
syy<-srswor(n1,N1)
yy.result<-getdata(yy,syy)

###结果输出###
library(openxlsx)
rr<-list()
tt<-list("乡镇抽样结果"=xz.result,"学校抽样结果"=xx.result,"医院抽样结果"=yy.result)
for(i in 1:length(tt)){
  rr[[i]]<-tt[[i]]
}
names(rr)<-names(tt)
write.xlsx(rr,file = "抽样结果.xlsx",rowNames=F)

 输出结果:ID_unit即为本次抽样抽中的序号

R语言进行随机抽样、分层抽样和系统抽样_第2张图片

你可能感兴趣的:(R数据处理,r语言)