r - 在因子水平内选择随机样本,每个因子水平的层大小不相等

标签 r random dplyr sample

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

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

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

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

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

最佳答案

我们按“物种”分割数据集,使用Map对观测数量进行采样,并rbind list 输出。

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

关于r - 在因子水平内选择随机样本,每个因子水平的层大小不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715863/

相关文章:

r - 如何在整个 data.frame 中搜索字符串

r - mutate_each 中的 one_of(vector) 导致找不到对象

r - 在 *every* 命令后播放 R/RStudio 蜂鸣声

c++ - 打包(类型删除)随机数生成器

r - 处理 R 中的递归深度限制

python - 逆 (CDF) 变换采样的错误分布

javascript - 随机数不是很随机

r - Dplyr 编写一个以列名作为输入的函数

r - 如何检查函数是否在R中的向量中?

r - 按成员列表的长度对列表列表进行排序