在R中生成相同数量的随机数
我有一个数据帧(40x3,其中行数等于人数),我想将每个人随机分配到10个组中的一个。为了做到这一点,我创建了一个名为“group”的新专栏,我做到了:在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 这是可行的,但我希望每
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