最近一直在研究R语言的抽样工作,抽样看似简单,发现编程编起来十分麻烦。我要在83所学校中抽取3个班级,并在这3个班级中抽取34名男生和34名女生。理论上,我只要按照这个思路去做就行,但是实际上问题挺复杂。首先,83所学校不是所有的学校有3个班级,其次,83所学校的班级名并不一致,比如说有的是1班,2班,3班,有的是101,102,103,还有的是根据专业来分班,所以在编程时必须考虑如何解决这些问题,最后,我们抽取的班级人数可能没有34人,有的学校规模比较小,可能只有一两个班级,学生总数达不到要求。在编程前期,班级名的事情难住了我,查阅了五本R语言的书籍,花了3天时间,终于解决了,用了两个循环,把另外的问题也解决,大功告成!
这是原始数据:
最后的结果
下面是代码,可以根据自己的需求修改代码。
library("xlsx")
setwd("I:\\工作\\2018年")
dat3=read.delim("clipboard")
name3=read.delim("clipboard")
a=list(0)
b=list(0)
c=list(0)
level=list(0)
for(i in 1:83) else{
level[[i]]=sample(levels(a[[i]]$班级),nlevels(a[[i]]$班级))
b[[i]]=a[[i]][is.element(a[[i]]$班级,sample(levels(a[[i]]$班级),nlevels(a[[i]]$班级))),]
}
}
for(i in 1:83) {
if(sum(b[[i]]$学校编号==i)>34){
c[[i]]=b[[i]][sample(1:nrow(b[[i]]),34,replace =FALSE ),]
}else{
c[[i]]=b[[i]][sample(1:nrow(b[[i]]),sum(b[[i]]$学校编号==i),replace =FALSE ),]
}
write.xlsx(c[[i]],file=paste0( name3$school[[i]], "抽样的1.xlsx"),row.names = FALSE)
}
欢迎批评指正!
领取专属 10元无门槛券
私享最新 技术干货