【问题标题】:Create a matrix of available pairings in a dataframe在数据框中创建可用配对矩阵
【发布时间】:2016-03-20 23:08:46
【问题描述】:

我有一个数据框games,看起来像这样:

             P1         P2
1      Johannes       Paul
2      Johannes       Falk
3          Paul       Falk
4          Paul        Kai
.           ...        ...

...以此类推,每行匹配两个玩家的游戏。 现在我想要一个表格或矩阵来显示已经发生的游戏,有点像这样:

          Johannes  Paul  Falk    Kai
Johannes     FALSE  TRUE  TRUE  FALSE
Paul          TRUE FALSE  TRUE   TRUE
Falk          TRUE  TRUE FALSE  FALSE
Kai          FALSE  TRUE FALSE  FALSE

我想出的最好的是table(games$P1.Spieler, games$P2.Spieler),它并不能很好地完成这项工作。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以将数据集melt 转换为“长”格式,transform 将“值”转换为factor,指定levels,获取table 并执行crossprod。然后,我们通过双重否定将 0 转换为 FALSE,将所有其他值转换为 TRUE。

    library(reshape2)
    !!crossprod(table(transform(melt(as.matrix(games))[-2], 
                value = factor(value, levels= unique(value)))))
    

    【讨论】:

      【解决方案2】:

      您也可以使用igraph 包:

      将 data.frame 加载到无向 igraph 中

      library(igraph)
      g <- as.undirected(graph.data.frame(df))
      

      通过简单的函数调用获取邻接矩阵:

      > get.adjacency(g, sparse = F)
               Johannes Paul Falk Kai
      Johannes        0    1    1   0
      Paul            1    0    1   1
      Falk            1    1    0   0
      Kai             0    1    0   0
      

      你甚至可以绘制它:

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多