我将尝试从给定数据框中对其进行抽样,以便每个变量级别都有足够的样本。
这可以通过按级别分离数据帧并从每个级别抽样来实现。
我认为
以下命令执行抽样...
当我输入时...
ddply
(数据帧到数据帧)可以帮助我完成此操作。
以下是一个最小化的示例:set.seed(1)
data1 <-data.frame(a=sample(c('B0','B1','B2'),100,replace=TRUE),b=rnorm(100),c=runif(100))
> summary(data1$a)
B0 B1 B2
30 32 38
以下命令执行抽样...
当我输入时...
data2 <- ddply(data1,c('a'),function(x) sample(x,20,replace=FALSE))
我遇到了以下错误
在
[.data.frame
(x, .Internal(sample(length(x), size, replace, : 当'replace = FALSE'时不能对整个人群进行大于样本量的抽样
这个错误是因为ddply
函数中的x
不是向量,而是数据框。
有没有人知道如何实现这个采样呢?
我知道一种方法是不使用ddply
,而是分为三个步骤:(1) 分离,(2) 采样,和(3) 合并。但是我想知道是否有一些方法...可以使用基础或者plyr
函数...
感谢您的帮助...
sample(nrow(x))
。 - Andrie