在R中生成相同数量的随机数

时间:2015-05-19 06:02:49

标签: r dataframe

我有一个数据帧(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

它有效,但我希望每组中的人数几乎相同。我怎样才能做到这一点?感谢。

4 个答案:

答案 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