r - 使用 R 随机配对不在同一组中的元素

标签 r algorithm

我正在用 R 编写一个算法来随机配对人,但配对中的人不能来自同一组(团队)。

我首先创建了一个包含所有人的 nxn 矩阵。我标记 0 表示不能配对在一起的人(如果他们在同一个团队中),否则标记为 1。

问题: 我现在需要从每一行中符合条件的人(所有 1)列表中抽样,并记下配对并确保该配对中的两个人现在不能与另一个人配对。

例如

姓名 - 团队

A - 1

B - 2

C - 3

D - 4

E - 1

F - 2

G - 1

  A B C D E F G
A 0 1 1 1 0 1 0
B 1 0 1 1 1 0 1
C 1 1 0 1 1 1 1
D 1 1 1 0 1 1 1
E 0 1 1 1 0 1 0
F 1 0 1 1 1 0 1
G 0 1 1 1 0 1 0

我意识到如果我们到达一个没有人可以匹配到一起的阶段,这个算法可能会卡住,所以我正在考虑加入一个计时器,以便在算法运行了 5 分钟后重新启动。

很高兴考虑您认为可能更合适的任何其他匹配算法。

我已经看过关于堆栈溢出的类似问题(例如 Sampling column values in a matrix, without replacement ),但它们似乎都没有解决不将来自同一组的人配对的问题。

谢谢。

最佳答案

尝试

 (!tcrossprod(table(df1)))+0L

数据

df1 <- structure(list(Name = c("A", "B", "C", "D", "E", "F", "G"), 
Team = c(1L, 
2L, 3L, 4L, 1L, 2L, 1L)), .Names = c("Name", "Team"),
 class =  "data.frame", row.names = c(NA, -7L))

关于r - 使用 R 随机配对不在同一组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775183/

相关文章:

c# - 在 C# 中执行此功能的最简单方法是什么?

r - 从 r 中的字符列中提取最后 n 个字符

r - 如何在 r 中命名维度的 "superscriptions"?

在 Visio 模型上最佳定位对象的算法

c - 证明 : Pythagorean Triple algorithm is faster by Euclid's Formula?

algorithm - 桶排序和基数排序有什么区别?

c++ - C++中的数独棋子算法

r - 如何根据单元格中的值在R数据框中创建新行?

r - Windows 脚本宿主失败

r - 在 R 中,如何创建频率堆积条形图,但条形上有百分比标签,y 轴上有频率?