在因子水平内选择一个随机样本,其大小取决于因子水平
问题描述:
我想在因子水平内选择我的数据框的随机样本。我可以使用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分割的每个数据帧?
该向量中的值需要指定 - 它们不是所有数据的一致比例,也不是一个一致的数字。
答
我们由“种” split
数据集,使用观测Map
到sample
数量,以及rbind
的list
输出。
do.call(rbind, Map(function(x,y) x[sample(y),], split(iris, iris$Species), 2:4))
谢谢@akrun。这工作很好。对于那些没有立即看到的人(比如我几周前就没有),最后的2:4可以用样本大小的命名向量代替。 – sianagh