将循环锦标赛的名义结果转换为邻接矩阵列表

重原子

我想从循环锦标赛中获得名义上的结果,并将其转换为二进制邻接矩阵的列表。

按照惯例,这些比赛的结果是通过记录获胜者的姓名来写的。这是一个示例表的代码,其中四个人(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”。

任何帮助深表感谢。

鲍姆斯

这是解决问题的一种方法,尽管我认为必须有一个更简单的方法-可能涉及plyr下面将数据帧分为与对应的子集set,然后对于每一轮,建立一个零表(具有NA对角线)以保存结果,最后通过用矩阵对表进行子集来将“获胜单元”设置为1。设置输出类别是matrix为了确保矩阵如此显示。

results <- lapply(split(roundrobin, roundrobin$set), function(set) {
  lapply(grep('^winners', names(set)), function(i) {
    tab <- table(set$home, set$visitor)
    tab[] <- 0
    diag(tab) <- NA
    msub <- t(apply(set, 1, function(x) {
      c(x[i], setdiff(c(x['home'], x['visitor']), x[i]))
    }))
    tab[msub] <- 1
    class(tab) <- 'matrix'
    tab
  })
})

第一组的结果:

> results[[1]]

[[1]]

     A  B  C  D
  A NA  1  1  1
  B  0 NA  1  0
  C  0  0 NA  0
  D  0  1  1 NA

[[2]]

     A  B  C  D
  A NA  1  1  1
  B  0 NA  0  0
  C  0  1 NA  0
  D  0  1  1 NA

[[3]]

     A  B  C  D
  A NA  1  1  1
  B  0 NA  1  0
  C  0  0 NA  0
  D  0  1  1 NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环锦标赛的分组列表组合

来自分类Dev

Python-将边缘列表转换为邻接矩阵

来自分类Dev

R:将表转换为邻接矩阵或边列表

来自分类Dev

将邻接矩阵转换为 R 中的两列表

来自分类Dev

从最近邻居搜索创建邻接矩阵。(将邻接列表转换为邻接矩阵)-Matlab

来自分类Dev

如何使用python将邻接矩阵转换为邻接列表?

来自分类Dev

R igraph-将加权邻接矩阵转换为加权边列表

来自分类Dev

如何将加权边列表转换为 R 中的邻接矩阵

来自分类Dev

将igraph邻接矩阵转换为numpy数组

来自分类Dev

将邻接矩阵转换为Cytoscape的Edgelist(csv文件)

来自分类Dev

将txt文件转换为邻接矩阵

来自分类Dev

将邻接矩阵转换为CSV文件

来自分类Dev

如何将邻接矩阵转换为发病率矩阵,反之亦然?

来自分类Dev

如何将稀疏矩阵转换为密集邻接矩阵?

来自分类Dev

将横截面数据转换为R中的邻接矩阵

来自分类Dev

将二部图转换为邻接矩阵python

来自分类Dev

将二部图转换为邻接矩阵Spark Scala

来自分类Dev

将data.frame转换为邻接矩阵以进行网络分析(R)

来自分类Dev

将二部图转换为邻接矩阵python

来自分类Dev

将二部图转换为邻接矩阵Spark Scala

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

如何将该邻接矩阵转换为图形对象?

来自分类Dev

通过避免for循环从节点列表构建邻接矩阵

来自分类Dev

在带有Python邻接表的锦标赛中查找汉密尔顿路径

来自分类Dev

R:将矩阵转换为子矩阵列表

来自分类Dev

将表列表转换为矩阵列表

来自分类Dev

R:如果值满足特定条件,如何将数据帧转换为邻接矩阵?

来自分类Dev

使用apply从R中的数据帧创建邻接矩阵列表

Related 相关文章

  1. 1

    循环锦标赛的分组列表组合

  2. 2

    Python-将边缘列表转换为邻接矩阵

  3. 3

    R:将表转换为邻接矩阵或边列表

  4. 4

    将邻接矩阵转换为 R 中的两列表

  5. 5

    从最近邻居搜索创建邻接矩阵。(将邻接列表转换为邻接矩阵)-Matlab

  6. 6

    如何使用python将邻接矩阵转换为邻接列表?

  7. 7

    R igraph-将加权邻接矩阵转换为加权边列表

  8. 8

    如何将加权边列表转换为 R 中的邻接矩阵

  9. 9

    将igraph邻接矩阵转换为numpy数组

  10. 10

    将邻接矩阵转换为Cytoscape的Edgelist(csv文件)

  11. 11

    将txt文件转换为邻接矩阵

  12. 12

    将邻接矩阵转换为CSV文件

  13. 13

    如何将邻接矩阵转换为发病率矩阵,反之亦然?

  14. 14

    如何将稀疏矩阵转换为密集邻接矩阵?

  15. 15

    将横截面数据转换为R中的邻接矩阵

  16. 16

    将二部图转换为邻接矩阵python

  17. 17

    将二部图转换为邻接矩阵Spark Scala

  18. 18

    将data.frame转换为邻接矩阵以进行网络分析(R)

  19. 19

    将二部图转换为邻接矩阵python

  20. 20

    将二部图转换为邻接矩阵Spark Scala

  21. 21

    如何将该邻接矩阵转换为图形对象?

  22. 22

    如何将该邻接矩阵转换为图形对象?

  23. 23

    如何将该邻接矩阵转换为图形对象?

  24. 24

    通过避免for循环从节点列表构建邻接矩阵

  25. 25

    在带有Python邻接表的锦标赛中查找汉密尔顿路径

  26. 26

    R:将矩阵转换为子矩阵列表

  27. 27

    将表列表转换为矩阵列表

  28. 28

    R:如果值满足特定条件,如何将数据帧转换为邻接矩阵?

  29. 29

    使用apply从R中的数据帧创建邻接矩阵列表

热门标签

归档