我有一个数据帧(40 x 3,其中行数等于人数),我想将每个人随机分配到10个组中的一个。为了做到这一点,我创建了一个名为“group”的新列,我做了:
for (i in 1:dim(data)[1]) {data$group[i] = sample(1:10,1)}
输出:
Gr1 Gr2 Gr3 Gr4 Gr5 Gr6 Gr7 Gr8 Gr9 Gr10
2 5 8 8 3 3 2 4 3 2
它有效,但我希望每组中的人数几乎相同。我怎样才能做到这一点?感谢。
答案 0 :(得分:2)
创建一个数字1..10的列表并将其复制四次,以便获得一个长度为40的列表。然后随机地将此向量拖放到您的group
列中。
我不太清楚将R放入代码中,对不起,但是对于那些懂语言的人来说应该很容易。
答案 1 :(得分:2)
为样本选择随机数会给您带来不同的结果。例如,WLOG的概率很小,从1:10中挑选10个数字时,你不会选择单个3.
您应该将此人分配给该组,而不是将该组分配给该人。如果你想在每个组中拥有相同数量的人,可以从列表中随机选择四个在第一组中,四个在第二组中等等。
编辑:我没有足够的声誉为@ cfh的帖子添加评论,但在R中,您可以输入group <- sample(rep(1:10,each=4))
,然后将其添加到您的数据框中。我相信这是最简单的解决方案。
答案 2 :(得分:2)
只需创建已知长度的向量1到10:
groups <- rep(1:10, 4)
然后将其改组,只需使用rnorm
或任何随机数生成器即可完成。这将是您的索引,然后您可以将其放置为随机播放向量groups
。
sample(groups)
实施例。输出:
[1] 7 5 3 7 9 8 9 8 7 10 8 10 5 10 6 5 8 2 4 10 7 5 4 2 3 2 6
[28] 3 1 4 1 2 1 6 1 3 6 9 9 4
答案 3 :(得分:0)
sample
是一个很好的解决方案,但您也可以使用randomizr
包中的完整随机分配功能:
library(randomizr)
Z <- complete_ra(N = 30, condition_names = paste0("gr", 1:10))
> table(Z)
Z
gr1 gr2 gr3 gr4 gr5 gr6 gr7 gr8 gr9 gr10
3 3 3 3 3 3 3 3 3 3