2016-11-21 51 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