12 我有大量数据(20,000个数据点),我想从中重复取样10个数据点。但是,一旦选择了这10个数据点,就不要再次选择它们。 我已经尝试过使用该sample函数,但是它似乎没有一个选项,可以在不替换该函数的多个调用的情况下进行采样。有没有简单的方法可以做到这一点? r sample — 罗宾特 source
9 戴森的思想,在R中得以实现: sample <- split(sample(datapoints), rep(1:(length(datapoints)/10+1), each=10)) sample[[13]] # the thirteenth sample — 共轭先验 source (+1)真正整齐的R代码。值得注意的是,如果为奇数,它将不起作用。ñn — chl 2010年 @chl谢谢!但我认为它将起作用。任务是从一组数据点中提供大小为10的样本。假设n =长度(数据点)。该代码给出了此类样品的最大数量(n%/%10)。第一个极端情况是n <10(无论如何在问题陈述中通过将数据集描述为“大”来排除,即n> 10)。在这种情况下,您将获得数据点和警告(不是错误)。第二个极端情况是是否存在悬空元素(当n %% 10!= 0时)。然后,您将获得尽可能多的样本和一个警告(不是错误)。在这两种情况之一中包含奇数情况。 — conjugateprior 似乎列表的第一个元素的长度为11,而不是10,并sum(unlist(lapply(sample, length)))返回其长度datapoints(我将其设置为1001)。 — chl 2010年 @chl该死!你说得很对。 — 共轭
2 这应该工作: 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) 但是,我认为这不是最优雅的解决方案... — 伯恩德·魏斯 source
1 @conjugateprior您的答案朝着正确的方向发展。但是至少对于我当前的R版本3.4.3,它不起作用。但是,通过一些调整它可以工作: mysample<-split(sample(length(datapoints)), 1:10) mysample[[9]] ## the ninth sample 由于我无法发表评论,因此我选择在此处回答。 — 第五名 source