我随机抽取了存储在向量中的正常分布中的600个元素:
sample_data <- rnorm(600, mean =10, sd = 6)
我试图将这个向量分成100个随机组,每组6个条目 这样做一次是一个简单的命题与样本函数:
group_1 <- sample(6, sample_data, replace=FALSE)
但是,如果我再次使用样本函数,则有可能会重复使用某些条目,因为它们不会从初始数据中删除。一种可能的解决方案可能是最初将数据存储在100x6矩阵中,并将每一行视为随机组。&#34;
但是,我很好奇是否有更有效的方法从数据集中获取连续样本,同时确保不会多次对条目进行采样。
谢谢!
答案 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)
,分配给组和将结果放在一个矩阵中。