我试图从给定的数据帧中采样一个数据帧,以便从变量的每个级别都有足够的样本。
这可以通过将数据帧按级别和样本与每个级别分开来实现。
我认为 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/