[問題] 取樣的問題

作者: 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