【问题标题】:Select a random sample within levels of a factor, unequal stratum size per factor level在因子水平内选择随机样本,每个因子水平的层大小不等
【发布时间】:2017-04-04 14:15:09
【问题描述】:

我想在一个因子的级别内选择我的数据帧的随机样本。我可以使用 ddply 在因子级别内获取样本:

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

但是,我不想简单地从每个因子水平抽取 2 个观察值。相反,我想从物种的 3 个级别中采样 2,3 和 4 个观察值(即来自 setosa 的 2 个,来自 versicolor 的 3 个,4 frm virginica)。我怎样才能做到这一点?

我可以创建一个值向量吗,例如c(2,3,4) 循环通过每个数据帧由 ddply 拆分?

需要指定该向量中的值 - 它们不是所有数据的一致比例,也不是一致的数字。

【问题讨论】:

  • 您的意思是“不等层的分层样本

标签: r random dplyr sample


【解决方案1】:

我们split 按“物种”划分数据集,使用Mapsample 的观察次数,以及rbindlist 输出。

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

【讨论】:

  • 谢谢@akrun。效果很好。对于那些没有立即看到它的人(就像我不会有几周的时间),最后的 2:4 可以替换为样本大小的命名向量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多