r - 将具有 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 |
我找不到一个简单的方法来做到这一点。我已经阅读并尝试了几件事,例如:
但我还没有成功。
解决方案
一个选项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"))
推荐阅读
- javascript - 加载动态数据时如何为highcharts指定特定的刻度位置?
- java - 使用 Selenium 的无头 Web 自动化
- ios - 自定义字体未显示在字体系列列表中
- python - script 标签下的网页抓取
- c++ - 长时间锁定互斥锁是否安全?
- javascript - 使用带有 javascript 的正则表达式并获取变量
- pandas - pandas astype 给出了一个奇怪的结果
- java - 在用户单击 listView 项目上的按钮的 Firebase 数据库上写入
- python-3.x - 如何在更短的时间内将列表中的每个元素添加到同一列表的另一个元素中?
- sql - 使用自连接比较同一表中的记录