我想从循环锦标赛中获取名义结果并将它们转换为二进制邻接矩阵列表。
按照惯例,这些比赛的结果是通过记录获胜者的名字来写的。这是一个示例表的代码,其中四个人(A、B、C、D)相互竞争:
set <- c(rep(1, 6), rep(2,6))
trial <- (1:12)
home <- c("B", "A", "C", "D", "B", "C", "D", "C", "B", "A", "A", "D")
visitor <- c("D", "C", "B", "A", "A", "D", "B", "A", "C", "D", "B", "C" )
winners.rr1 <- c("D", "A", "B", "A", "A", "D", "D", "A", "B", "D", "A", "D")
winners.rr2 <- c("D", "A", "C", "A", "A", "D", "D", "A", "C", "A", "A", "D")
winners.rr3 <- c("D", "A", "B", "A", "A", "D", "D", "A", "B", "D", "A", "D")
roundrobin <- data.frame(set=set, trial=trial, home=home, visitor=visitor,
winners.rr1=winners.rr1, winners.rr2=winners.rr2,
winners.rr3=winners.rr3)
这是表格:
> roundrobin
set trial home visitor winners.rr1 winners.rr2 winners.rr3
1 1 1 B D D D D
2 1 2 A C A A A
3 1 3 C B B C B
4 1 4 D A A A A
5 1 5 B A A A A
6 1 6 C D D D D
7 2 7 D B D D D
8 2 8 C A A A A
9 2 9 B C B C B
10 2 10 A D D A D
11 2 11 A B A A A
12 2 12 D C D D D
此表显示了三场循环赛的获胜者。在每场比赛中,有两组:每个球员在主场与其他所有球员比赛一次,一次作为访客。这样一来,每场循环赛总共进行 12 次选拔赛。
所以,在第一盘的第一场比赛中,选手 D 击败了选手 B。在第一盘的第二场比赛中,选手 A 击败了选手 C,以此类推。
我想将这些结果变成六个邻接矩阵的列表。每个矩阵将从每个循环赛中的每个集合中导出。赢在行上记为“1”,输在行上记为“0” 。(“家”和“访客”的名称与后面的内容无关)。
这是第一轮循环赛第 1 组的邻接矩阵的样子:
> Adj.mat.set1.rr1
X A B C D
1 A NA 1 1 1
2 B 0 NA 1 0
3 C 0 0 NA 0
4 D 0 1 1 NA
这是第一轮循环赛第 2 组的样子:
> Adj.mat.set2.rr1
X A B C D
1 A NA 1 1 0
2 B 0 NA 1 0
3 C 0 0 NA 0
4 D 1 1 1 NA
后一个矩阵显示,例如,玩家 A 赢得了 2 次尝试,玩家 B 赢得了 1 次尝试,玩家 C 赢得了 0 次尝试,玩家 D 赢得了 3 次尝试。
因此,这种操作的技巧是将每次胜利(记录为名称)转换为邻接矩阵相应行中的得分“1”,而损失记录为“0”。
任何帮助深表感谢。