如何从已分块变量集中随机创建等大小的新变量块?
解决均匀随机分配变量块的问题
我懂你的需求啦——你需要把20个变量均匀分配到4个随机块中,每个块刚好包含5个变量,而之前用sample(x = 1:p, size = n, replace = TRUE)的方法会因为有放回抽样导致块大小不均,这显然不是你想要的结果。
正确的实现方法
核心思路是先创建一个包含每个块编号、且每个编号恰好重复5次的向量,再打乱这个向量的顺序,这样就能保证每个块最终刚好分配到5个变量:
# 可选:设置随机种子,让结果可复现 set.seed(123) # 生成每个块编号重复5次的向量,再随机打乱顺序 block_assignments <- sample(rep(1:4, each = 5)) # 查看结果 block_assignments
运行这段代码后,你会得到类似这样的输出(因为随机打乱,每次结果会有差异,但每个块的数量一定是5):
[1] 4 1 2 1 4 2 3 1 2 3 2 1 4 3 1 2 3 3 4 4
验证结果
你可以用table()函数确认每个块的变量数量确实是5:
table(block_assignments)
输出会是:
block_assignments 1 2 3 4 5 5 5 5
为什么原来的方法不行?
你之前用的sample(x = 1:4, size = 20, replace = TRUE)是有放回随机抽样,这意味着每个位置选择块编号时都是独立的,最终每个块的变量数量会是随机波动的(比如有的块可能有7个,有的只有3个),无法保证严格的等大小分配。
内容的提问来源于stack exchange,提问作者Ph.D.Student
相关产品推荐
相关产品推荐

