[問題] 取樣的問題

看板R_Language作者 (米蟲)時間9年前 (2015/05/04 14:34), 編輯推噓1(1017)
留言18則, 3人參與, 最新討論串1/2 (看更多)
版上先進大家好,我有個問題想請教大家 現在我手上有筆某大專院校22個系所的學生資料(共1萬筆) 我想要在每個系所各取樣30名學生資料出來分析,請問該怎麼做? 我想到的方法是:每個系所subset一次、隨機抽30名出來存成一個物件,重覆22次 最後將上面22個物件rbind即可 但是這樣的做法很費時也沒有效率,想請問有沒有比較快的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.14.191.172 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1430721259.A.0C8.html

05/04 16:03, , 1F
Assume dat is the dataset
05/04 16:03, 1F

05/04 16:07, , 2F
dat %>% split(.$department)%>%lapply(function(x)
05/04 16:07, 2F

05/04 16:07, , 3F
x[sample(1:nrow(x), 2),]) %>% rbindlist(.)
05/04 16:07, 3F

05/04 16:08, , 4F
department是dat中系所的變數
05/04 16:08, 4F

05/04 16:08, , 5F
base::split, data.table::rbindlist,magrittr::%>%
05/04 16:08, 5F

05/04 16:09, , 6F
2是取樣的樣本數
05/04 16:09, 6F

05/04 16:10, , 7F
你也可以用dplyr group_by做
05/04 16:10, 7F

05/04 16:10, , 8F
rbindlist(.) 可以用do.call(rbind, .)取代
05/04 16:10, 8F

05/04 16:59, , 9F
celestialgod 回文~這樣看很花
05/04 16:59, 9F

05/04 18:01, , 10F
不想要因此再開一篇文章QQ
05/04 18:01, 10F

05/04 18:01, , 11F
才兩行程式而已
05/04 18:01, 11F

05/13 11:33, , 12F
用 tapply() 和 sample() 找出大矩陣的 index 就好
05/13 11:33, 12F

05/13 11:36, , 13F
tapply(1:10000,groupFactor,funciton(s){sample(s,30)})
05/13 11:36, 13F

05/13 11:36, , 14F
樓上,split可以接根據變數做切割,會方便很多
05/13 11:36, 14F

05/13 11:36, , 15F
然後: 大矩陣[index,]
05/13 11:36, 15F

05/13 11:36, , 16F
其實會比tapply快。
05/13 11:36, 16F

05/13 11:39, , 17F
Mm....split 也行
05/13 11:39, 17F

05/13 11:41, , 18F
sapply(split(1:6,c(1,1,1,2,2,2)),sample,2) 這個感覺
05/13 11:41, 18F
文章代碼(AID): #1LHnBh38 (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1LHnBh38 (R_Language)