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)
我一直在努力用 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)