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

在R中生成相同数量的随机数,r,dataframe,R,Dataframe,我有一个数据帧(40x3,其中行数等于人数),我想将每个人随机分配到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 这是可行的,但我希望每

我有一个数据帧(40x3,其中行数等于人数),我想将每个人随机分配到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

这是可行的,但我希望每组的人数几乎相同。我该怎么做?谢谢。

创建一个数字1..10的列表,并复制四次,这样您就可以得到一个长度为40的列表。然后随机洗牌这个向量,并将其放入您的
列中


很抱歉,我不知道足够的R来将其转换为代码,但对于懂这门语言的人来说,这应该是相当容易的。

为样本选择随机数将得到不同的结果。WLOG举例来说,当从1:10中选择10个数字时,你不可能选择一个3

您应该将人员分配给组,而不是将组分配给人员。如果你希望每组人数相同,从你的列表中随机选择4人进入第一组,4人进入第二组,以此类推


编辑:我没有足够的声誉在@cfh的帖子中添加评论,但在R中,你可以键入
group只需创建已知长度的向量1到10:

groups <- rep(1:10, 4)
例如:产出:

 [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

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 
库(randomizr)
Z表(Z)
Z
gr1 gr2 gr3 gr4 gr5 gr6 gr7 gr8 gr9 gr10
3    3    3    3    3    3    3    3    3    3 

你可以从一个可重复的例子开始(如果你想要一个实际的解决方案,而不是像下面那样收集一些时尚小贴士)。@DavidArenburg:What。这个问题是完全可以理解的,我的回答给出了一个容易实现的方法,可以将行平均分为几组。这不是一个“模糊的提示”。这个网站上的势利真的很难忍受。@cfh我既不理解这个问题,也不理解你的答案,也不理解如何实际实施它。你自己说你不知道R,那你为什么要回答R的问题呢?任何人都可以说“做这个做那个”,但这不是编码的工作方式。为了解决实际问题,您需要实际的代码。你的答案甚至不包含伪代码。或OP并没有跟着他们。@Davidernburg:我给出了一个算法。算法独立于实现它们的语言。事实上,Jeff提出了一个简单的单行程序来实现我在R中的算法。太棒了,我们一起工作,提出了一个优雅的解决方案。我们提供了价值。你只是抱怨“规则”。@cfh我没有抱怨规则。我想帮助OP解决他的问题,但首先,他需要帮助自己,并提供一个可复制的例子。我不知道你或任何其他答案的价值,因为我不知道他们在问什么。也有可能更容易解决这个问题。你也可能不理解这个问题。你不知道R,所以你不知道什么是可能的,什么是不可能的。或者什么是有效的解决方案,或者什么不是。例如,您可能也不知道什么是矢量化语言以及它与Java/C的区别。
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