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

ann*_*vic 4 algorithm r

我在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
Run Code Online (Sandbox Code Playgroud)

我意识到,如果我们进入一个没有人可以匹配在一起的阶段,这个算法可能会卡住,所以我想在计算机运行5分钟时合并一个计时器重启.

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

我已经看过堆栈溢出的类似问题(例如,矩阵中的采样列值,没有替换),但它们似乎都没有解决不对同一组人进行配对的问题.

谢谢.

akr*_*run 5

尝试

 (!tcrossprod(table(df1)))+0L
Run Code Online (Sandbox Code Playgroud)

数据

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))
Run Code Online (Sandbox Code Playgroud)