首页 > 解决方案 > 将具有 3 列的数据框转换为加权邻接矩阵

问题描述

我正在尝试根据具有 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

我找不到一个简单的方法来做到这一点。我已经阅读并尝试了几件事,例如:

但我还没有成功。

标签: rdataframematrixgraphadjacency-matrix

解决方案


一个选项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"))

推荐阅读