[问题] 取样的问题

楼主: ardodo (米蟲)   2015-05-04 14:34:16
版上先进大家好,我有个问题想请教大家
现在我手上有笔某大专院校22个系所的学生资料(共1万笔)
我想要在每个系所各取样30名学生资料出来分析,请问该怎么做?
我想到的方法是:每个系所subset一次、随机抽30名出来存成一个物件,重复22次
最后将上面22个物件rbind即可
但是这样的做法很费时也没有效率,想请问有没有比较快的方法?
作者: celestialgod (天)   2015-05-04 16:03:00
Assume dat is the datasetdat %>% split(.$department)%>%lapply(function(x)x[sample(1:nrow(x), 2),]) %>% rbindlist(.)department是dat中系所的变量base::split, data.table::rbindlist,magrittr::%>%2是取样的样本数你也可以用dplyr group_by做rbindlist(.) 可以用do.call(rbind, .)取代
作者: psinqoo (零度空間)   2015-05-04 16:59:00
celestialgod 回文~这样看很花
作者: celestialgod (天)   2015-05-04 18:01:00
不想要因此再开一篇文章QQ才两行程式而已
作者: gsuper (Logit(odds))   2015-05-13 11:33:00
用 tapply() 和 sample() 找出大矩阵的 index 就好tapply(1:10000,groupFactor,funciton(s){sample(s,30)})
作者: celestialgod (天)   2015-05-13 11:36:00
楼上,split可以接根据变量做切割,会方便很多
作者: gsuper (Logit(odds))   2015-05-13 11:36:00
然后: 大矩阵[index,]
作者: gsuper (Logit(odds))   2015-05-13 11:39:00
Mm....split 也行sapply(split(1:6,c(1,1,1,2,2,2)),sample,2) 这个感觉

Links booklink

Contact Us: admin [ a t ] ucptt.com