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

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

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

代码部分:

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即为本次抽样抽中的序号

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值