R - 循环中的独特分层抽样

unique stratified sampling in R - loop

我一直在努力用 R 在 for 循环中随机抽样我的数据,但我需要帮助。这是我第一次编写循环并进行随机采样...... 这里有一个我目前拥有的可重现的脚本。 我想 运行 循环 5 次以获得每次包含 3 个随机和独特观察的不同样本。

所以每次迭代都会给我一个 'virginica' 的观察值,一个 'setosa' 的观察值和一个 'versicolor' 的观察值,每次都不一样。

我的问题是我正在使用的两个函数(采样和复制)一个接一个地起作用,我需要它们一起起作用,因为我希望最终样本数始终相同(N=3 ).

最后一个问题:如何保存结果?

有什么帮助吗?提前致谢!

for(i in 1:5){                                             # Number of repetitions of the loop
  rnd.iris <- iris[sample(1:nrow(iris),3,replace=FALSE),]  # Take a random sample of size 3 from a dataset "iris"; sampling without replacement
  rnd.iris <- rnd.iris[!duplicated(rnd.iris$Species),]     # Eliminate replicates (but it does it after the randomization -> wrong for my purpose)
  print(rnd.iris)
}

首先,拆分数据。然后采样。

for(i in 1:5) { 
  vi.iris <- iris[iris$Species=="virginica",]
  vi.iris <- vi.iris[sample(1:nrow(vi.iris),1,replace=FALSE),]

  se.iris <- iris[iris$Species=="setosa",]
  se.iris <- se.iris[sample(1:nrow(se.iris),1,replace=FALSE),]

  ve.iris <- iris[iris$Species=="versicolor",]
  ve.iris <- ve.iris[sample(1:nrow(ve.iris),1,replace=FALSE),]    

  rnd.iris <- do.call(rbind, list(vi.iris, se.iris, ve.iris))   
  print(rnd.iris)
}

或者,您可以使用 dplyr

rnd.iris <- iris %>% group_by(Species) %>% sample_n(1)