Select 一个因子水平内的随机样本,每个因子水平的层大小不相等
Select a random sample within levels of a factor, unequal stratum size per factor level
我想 select 在一个因子的水平内对我的数据框进行随机抽样。我可以使用 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 个来自 versicolor,4 个来自 virginica)中采样,比如 2,3 和 4 个观察值。我怎样才能做到这一点?
我可以创建一个值向量吗? c(2,3,4) 循环通过由 ddply 拆分的每个数据帧?
需要指定该向量中的值 - 它们不是所有数据的一致比例,也不是一致的数字。
我们split
数据集由'Species',使用Map
到sample
的观察次数,以及rbind
list
输出。
do.call(rbind, Map(function(x,y) x[sample(y),], split(iris, iris$Species), 2:4))
我想 select 在一个因子的水平内对我的数据框进行随机抽样。我可以使用 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 个来自 versicolor,4 个来自 virginica)中采样,比如 2,3 和 4 个观察值。我怎样才能做到这一点?
我可以创建一个值向量吗? c(2,3,4) 循环通过由 ddply 拆分的每个数据帧?
需要指定该向量中的值 - 它们不是所有数据的一致比例,也不是一致的数字。
我们split
数据集由'Species',使用Map
到sample
的观察次数,以及rbind
list
输出。
do.call(rbind, Map(function(x,y) x[sample(y),], split(iris, iris$Species), 2:4))