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

时间:2015-12-14 16:43:39

标签: r for-loop random unique

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

所以每次迭代都会给我一个关于' virginica'的一个观察,一个用于' setosa'每次都有一种不同的颜色。

我的问题是我正在使用的两个函数(样本和重复)一个接一个地执行,我需要它们一起动作,因为我希望总是具有相同的最终样本数(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)
}

1 个答案:

答案 0 :(得分:0)

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

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)