我有大量数据(20,000 个数据点),我想从中抽取 10 个数据点的重复样本。但是,一旦我选择了这 10 个数据点,我希望它们不再被选择。
我已经尝试使用该sample
函数,但它似乎没有一个选项可以在不替换多次调用该函数的情况下进行采样。有没有一种简单的方法可以做到这一点?
我有大量数据(20,000 个数据点),我想从中抽取 10 个数据点的重复样本。但是,一旦我选择了这 10 个数据点,我希望它们不再被选择。
我已经尝试使用该sample
函数,但它似乎没有一个选项可以在不替换多次调用该函数的情况下进行采样。有没有一种简单的方法可以做到这一点?
您可以在整个数据集上调用一次 sample 以对其进行置换。然后,当你想要一个样品时,你可以拿前 10 个。如果你想要另一个样品,就拿下 10 个。依此类推。
Dason 的想法,在 R 中实现:
sample <- split(sample(datapoints), rep(1:(length(datapoints)/10+1), each=10))
sample[[13]] # the thirteenth sample
这应该有效:
x <- rnorm(20000)
x.copy <- x
samples <- list()
i <- 1
while (length(x) >= 10){
tmp <- sample(x, 10)
samples[[i]] <- tmp
i <- i+1
x <- x[-match(tmp, x)]
}
table(unlist(samples) %in% x.copy)
但是,我认为这不是最优雅的解决方案......
@conjugateprior您的答案是正确的。但至少对于我目前的 R 版本 3.4.3,它不起作用。然而,通过一些调整它可以工作:
mysample<-split(sample(length(datapoints)), 1:10)
mysample[[9]] ## the ninth sample
由于我无法发表评论,所以我选择在这里回答。