Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R随机配对不在同一组中的元素_R_Algorithm - Fatal编程技术网

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

使用R随机配对不在同一组中的元素,r,algorithm,R,Algorithm,我正在用R写一个算法来随机配对,但配对中的人不能来自同一组(团队) 我首先创建了一个所有人的nxn矩阵。我标记了0以表示无法配对的人(如果他们在同一个团队中),否则标记为1 问题: 我现在需要从每一行的合格人员列表(所有1)中取样,并记录配对情况,确保该配对中的两个人现在不能与另一个人配对 e、 g 姓名-团队 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

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

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

问题: 我现在需要从每一行的合格人员列表(所有1)中取样,并记录配对情况,确保该配对中的两个人现在不能与另一个人配对

e、 g

姓名-团队

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分钟后加入一个计时器重新启动

高兴地考虑任何其他匹配算法,你认为可能更合适。

我已经研究过堆栈溢出的类似问题(例如),但它们似乎都没有解决不将来自同一组的人配对的问题

谢谢。

试试看

 (!tcrossprod(table(df1)))+0L
数据
df1-Hi-akrun。感谢您的快速解决方案。我试过你建议的代码行,但它返回一个2x2的零矩阵。在您的解决方案中,我使用了我的nxn矩阵来代替“df1”,这样我的代码行看起来就像“(!tcrossprod(table(matrix)))+0L”。这就是我做错的吗?谢谢。@annievic更新了我使用的数据。它不能处理超过2列的内容。这就是为什么需要一个更好的例子而不是一个简单的例子的原因之一。谢谢。这是一种比我以前使用的更有效的生成矩阵的方法。不过,我真正需要回答的问题是,一旦我有了这个矩阵,如何找到随机配对(确保来自同一团队的人不会配对在一起)。有什么想法吗?谢谢。@annievic对不起,我以为这是预期的输出。你们能用预期的结果更新你们的帖子吗?或者更好的做法是,随着更多人的关注,作为一个新问题提问。
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))