r - 将具有 3 列的数据帧转换为加权邻接矩阵

标签 r dataframe matrix graph adjacency-matrix

我正在尝试基于具有 3 列的数据框在 R 中创建一个矩阵:第一列是组中人员的姓名,第二列也是组中人员的姓名,第三列是一个值,表示人员的情况比赛:

 Person1 Person2 Match
1     Amber Tiffany     5
2     Amber   James     1
3     Amber Kenneth     7
4     Amber  Gordon     9
5   Tiffany   James     4
6   Tiffany Kenneth     6
7   Tiffany  Gordon     6
8     James Kenneth     3
9     James  Gordon     7
10 Kenneth   Gordon     2

etc 
(实际上还有更多的名称和值)
我想要矩阵的两个轴上的人名,如下所示:



琥珀色
蒂芙尼
詹姆士
肯尼斯
戈登


琥珀色
0
5
1
7
9

蒂芙尼
5
0
4
6
6

詹姆士
1
4
0
3
7

肯尼斯
7
6
3
0
2

戈登
9
6
7
2
0


我找不到一个简单的方法来做到这一点。
我已经阅读并尝试了几件事,例如:
  • Reshape three column data frame to matrix ("long" to "wide" format)
  • R: Create 3 column dataframe from sparse matrix
  • How to reshape data from long to wide format
  • Reshape three column data frame to matrix ("long" to "wide" format)

  • 但我还没有成功。

    最佳答案

    带有 igraph 的选项

    get.adjacency(
      graph_from_data_frame(df, directed = FALSE),
      attr = "Match",
      sparse = FALSE
    )
    
            Amber Tiffany James Kenneth Gordon
    Amber       0       5     1       7      9
    Tiffany     5       0     4       6      6
    James       1       4     0       3      7
    Kenneth     7       6     3       0      2
    Gordon      9       6     7       2      0
    
    数据
    > dput(df)
    structure(list(Person1 = c("Amber", "Amber", "Amber", "Amber", 
    "Tiffany", "Tiffany", "Tiffany", "James", "James", "Kenneth"),
        Person2 = c("Tiffany", "James", "Kenneth", "Gordon", "James",
        "Kenneth", "Gordon", "Kenneth", "Gordon", "Gordon"), Match = c(5L,
        1L, 7L, 9L, 4L, 6L, 6L, 3L, 7L, 2L)), class = "data.frame", row.names = c("1",
    "2", "3", "4", "5", "6", "7", "8", "9", "10"))
    

    关于r - 将具有 3 列的数据帧转换为加权邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65726291/

    相关文章:

    r - R中按年切割时的不良结果

    r - 将矩阵更改为仅包含唯一数字 R 的矩阵

    algorithm - 在二维 boolean 矩阵中找到最接近的 "true"元素?

    python - 从 2 个法线创建旋转矩阵

    r - 如何使用 R 将 csv 转换为 xls?

    r - 创建特定条件下的计数表

    r - 在 R 中将 ifelse 与日期一起使用

    python - 仅替换 pandas 中数据框行的第一个最大值?

    python - 根据时间间隔连接 Pandas 数据帧并计算平均值

    python - 更改数据框行名称