我试图从给定的数据帧中采样一个数据帧,以便从变量的每个级别都有足够的样本。
这可以通过将数据帧按级别和样本与每个级别分开来实现。
我认为 ddply (data-frame to data-frame) 会为我做这件事。
举一个最小的例子:

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))
我收到以下错误

这个错误是因为 x 函数中的 ddply 不是向量而是数据帧。
有没有人知道如何实现这种采样?
我知道一种方法是不使用 ddply,而只在三个步骤中进行 (1) 隔离、(2) 采样和 (3) 整理。但我想知道必须以某种方式......使用 base 或 plyr 函数......
感谢您的帮助...

最佳答案

我认为您想要的是使用 x 对在 sample 中传递的数据帧进行子集化:

ddply(data1,.(a),function(x) x[sample(nrow(x),20,replace = FALSE),])

但是,当然,您仍然需要注意每个部分的样本大小(在本例中为 20)至少与基于 a 级别的数据的最小子集一样大。

关于r - 从大数据帧中采样小数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9913066/

10-12 17:11
查看更多