【发布时间】:2021-11-02 14:54:03
【问题描述】:
如果我们有数据:
| group | group_size |
|---|---|
| a | 2 |
| b | 3 |
| c | 1 |
| d | 4 |
| e | 2 |
| f | 4 |
| g | 1 |
| h | 3 |
| i | 1 |
| j | 3 |
| k | 1 |
| l | 1 |
- 输入数据代码:
df <- data.frame(group = c("a","b","c","d","e","f","g","h","i","j","k","l"),
group_size = c(2,3,1,4,2,4,1,3,1,3,1,1))
并且我想将组随机配对或三组成更大的组,这些组的大小都相同,我将如何在 R 中执行此操作?对于我的结果 - 我希望所有组都与另一个组随机匹配,并让 4-5 个新组中的每一个都具有相同的大小。我需要每周随机重做一次,所以我想确保结果每次都可以随机化。
谢谢。
样本所需的输出:
| new_grp | members | new_grp_size |
|---|---|---|
| group 1 | a,c,e | 5 |
| group 2 | b,l,g | 5 |
| group 3 | d,k | 5 |
| group 4 | j,h | 6 |
| group 5 | i,f | 5 |
请注意,所有组的大小都尽可能接近。
【问题讨论】:
-
只是为了清楚:例如配对 a+b 和 c+d 是可以接受的,前提是可以从所有剩余的组构建配对和三重奏,这样每个新组也有 5 个成员。你在找这样的东西吗?
-
是的,只要可以为未来的比赛随机分配!! @guero64
-
我假设 "pair or trio" 与 2 和 3 的
group_size没有关联,因此group_size变量更像是一个分组变量而不是使用它的价值,对吗?另外,"pair or trio" ...哪一个?任意/随机?如果我们随机将组配对并且有一组 1 会发生什么?显示预期的输出可能会有所帮助(知道您希望它是随机的)。 -
最后,当我们检查所有组的大小是否相同时,组大小变量很重要。所以我认为最好的办法是告诉 R 我们希望在每个组中有多少人(总和(组大小)/组数),然后让 R 决定哪些组应该是三人组,哪些应该是双人组,哪些应该是四人组等等。这样做的整个目标是避免使用比其他组小得多的组。
-
这实际上是计算机科学中的一个老问题,称为 k-way-partitioning 问题 (en.wikipedia.org/wiki/Partition_problem)。有一些近似值和精确算法可以解决这个问题,但我不知道 r-package 是否实现了这些,但如果你搜索分区,也许你可以找到一个。