首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从邻接表生成邻接矩阵

从邻接表生成邻接矩阵
EN

Stack Overflow用户
提问于 2014-08-26 07:50:10
回答 2查看 1.9K关注 0票数 2

我的友谊数据在一个邻接列表中。样本中的每个人(用id表示)最多可以提名5个朋友(f1-f5)。名为"net_test“的数据框架如下所示:

代码语言:javascript
复制
    id   f1   f2   f3   f4   f5
1  1101 1113 1112   NA   NA   NA
2  1102 1111 1113 1103 1105   NA
3  1103 1105 1110   NA   NA   NA
4  1104 1115 1106 1110 1109 1112
5  1105 1103 1109 1116 1101   NA
6  1106 1121 1103 1113   NA   NA
7  1107 1106 1111   NA   NA   NA
8  1108 1104 1109   NA   NA   NA
9  1109 1114 1103 1113 1108 1120
10 1110 1101 1103 1109 1107   NA

第一行是列号。根据这些数据,我想生成一个邻接矩阵,其中‘d作为行名和列名,如果两个’d具有友好链接,则生成条目1。我尝试先将它保存为一个图,然后在第二步生成邻接矩阵:

代码语言:javascript
复制
require(igraph)
netdat<-graph.adjlist(net_test, mode="out", duplicate=FALSE)
adjmat <- get.adjacency(netdat, type="both")

当我应用graph.adjlist命令时,会发生以下错误:

代码语言:javascript
复制
At structure_generators.c:84 : Invalid (negative) vertex id, Invalid vertex id

会有另一种方法将邻接表转换成邻接矩阵吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-26 11:19:48

你误解了命令。命令get.adjlist作为参数,接受一个i图形对象,并返回图形的列表类型对象表示形式。您正在将此应用于数据帧,而该数据帧并不是被胁迫到igraph对象的。

下面是使用数据框架构造i图形对象的正确方法,以及如何获得该对象的各种图形表示形式。

代码语言:javascript
复制
require(reshape2)
net_list <- melt( net_test, id.vars = "id")
net_list <- net_list[ !is.na(net_list$value), c("id", "value") ]
graph_o <- graph.data.frame(net_list) #This is a proper igraph graph object
#got from a data frame directly

list_rep <- get.adjlist(graph_o) #this now returns an adjacency list 
#representation of your graph
matrix_rep <- get.adjacency(graph_o) #this gives you the adjacency
#matrix as a (sparse) matrix with the row and column names as you want.
票数 3
EN

Stack Overflow用户

发布于 2014-08-26 08:38:26

我想问题是,net_test不是适当的邻接列表,因为它包含的不仅仅是两个列。所以我要做的第一件事就是把它融化成这种形式:

代码语言:javascript
复制
require(reshape2)
net_list <- melt( net_test, id.vars = "id")
net_list <- net_list[ !is.na(net_list$value), c("id", "value") ]
colnames(net_list) <- c("from", "to")
graph.adjlist(net_list, mode="out", duplicate=FALSE)

# IGRAPH D--- 1121 66 --

如果你只需要邻接矩阵,而不需要进一步的图像,你可以直接cast熔融net_list

代码语言:javascript
复制
acast(net_list, from ~ to, fun.aggregate = length )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25500636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档