从数据集中随机抽样然后删除抽样条目(R)

时间:2015-10-02 03:21:04

标签: r random

我随机抽取了存储在向量中的正常分布中的600个元素:

sample_data <- rnorm(600, mean =10, sd = 6)

我试图将这个向量分成100个随机组,每组6个条目 这样做一次是一个简单的命题与样本函数:

group_1 <- sample(6, sample_data, replace=FALSE)   

但是,如果我再次使用样本函数,则有可能会重复使用某些条目,因为它们不会从初始数据中删除。一种可能的解决方案可能是最初将数据存储在100x6矩阵中,并将每一行视为随机组。&#34;

但是,我很好奇是否有更有效的方法从数据集中获取连续样本,同时确保不会多次对条目进行采样。
谢谢!

1 个答案:

答案 0 :(得分:0)

g成为一个向量,将每个索引1..600分配给一个组,1..100。我们将从

开始
g0 = rep(1:100, each=6)
# [1]   1   1   1   1   1   1   2   2   2 ...

并争抢它

set.seed(1)
g = sample(g0)
#   [1]  27  38  58  91  21  90  94  66  ...

现在,如果您想要拆分原始矢量,请使用split

split(sample_data, g)
# $`1`
# [1] 18.528965  7.463326  7.585449  5.701404  2.017379 10.866809
# 
# $`2`
# [1]  6.338364 22.112578  5.370649  9.952592 10.618581  1.168506
# ...

正如几位评论者所指出的,将其存储在矩阵中是有意义的。它可以更快速,更全面地使用:

sample_mat <- matrix(sample_data[order(g)], 100, 6, byrow=TRUE)
#           [,1]      [,2]     [,3]     [,4]      [,5]      [,6]
# [1,] 18.528965  7.463326 7.585449 5.701404  2.017379 10.866809
# [2,]  6.338364 22.112578 5.370649 9.952592 10.618581  1.168506
# ...

我喜欢构建这样的向量g来跟踪事物,但正如@thelatemail在其中一条评论中指出的那样,你可以简单地执行sample_mat <- matrix(sample(sample_data), 6, 100),分配给组和将结果放在一个矩阵中。