2016-11-21 52 views
2

我想在因子水平內選擇我的數據框的隨機樣本。我可以使用ddply在因子水平內得到一個樣本:在因子水平內選擇一個隨機樣本,其大小取決於因子水平

library(dplyr) 
newdf <- ddply(iris, ~Species, function(x){ 
    ndf <- x[sample(nrow(x),2), ] 
}) 
with(newdf,table(Species)) 

但是,我不想簡單地從每個因子水平中抽取2個觀測值。相反,我想從樣本的3個級別(即2個來自setosa,3個來自versicolor,4個frm virginica)抽樣2,3,4個觀測值。我怎樣才能做到這一點?

我可以創建一個向量值,例如: c(2,3,4)循環通過ddply分割的每個數據幀?

該向量中的值需要指定 - 它們不是所有數據的一致比例,也不是一個一致的數字。

回答

2

我們由「種」 split數據集,使用觀測Mapsample數量,以及rbindlist輸出。

do.call(rbind, Map(function(x,y) x[sample(y),], split(iris, iris$Species), 2:4)) 
+1

謝謝@akrun。這工作很好。對於那些沒有立即看到的人(比如我幾周前就沒有),最後的2:4可以用樣本大小的命名向量代替。 – sianagh