首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:邻接表到邻接矩阵

R:邻接表到邻接矩阵
EN

Stack Overflow用户
提问于 2015-03-27 07:37:22
回答 1查看 4K关注 0票数 3

Bonjour,我想将邻接表(3列)转换为邻接矩阵。在这个论坛中,我找到了许多关于如何将边列表转换为邻接矩阵的示例。我成功地实现了两列列表。我已经尝试了所有我能在网上找到的解决方案,但我似乎遗漏了一小步。

我尝试过的

我的变量是用户、国家、书籍

代码语言:javascript
复制
User<-c("maman","sophia","Antoine")  
Country<-c("Canada","USA","Mexico")  
books<-c("Coelho","Rimbaud","The flight") 
dat<-data.frame(User, Country,books)  


User |       Country | books   
maman |        Canada  |    Coelho   
sophia|          USA  |    Rimbaud  
Antoine|     Mexico  | The flight

第一次尝试

代码语言:javascript
复制
library(igraph)     
m<-as.matrix(dat)    
g<-graph.adjacency(m, mode="directed") ### If that worked I could have used      
"get.adjacency" 

第二次尝试

尝试将数据转换为边缘列表,但由于有三列,因此出现错误

代码语言:javascript
复制
el<-as.matrix(dat)       
g=graph.edgelist(el,directed=TRUE) # turns   

异常输出

代码语言:javascript
复制
     maman sophia Antoine Canada USA Mexico Coelho Rimbaud The fligth
maman    1   0     1       0      0   0      0        1          0
sophia   0   0     0       0      1   0      1        0          1
Antoine  0   1     1       0      1   0      0        1          0
Canada   1   0     1       0      0   1      0        1          1
 USA     0   0     0       1      0   0      0        0          1
 Mexico  0   0     0       0      1   1      1        0          0 
Coelho   0   0     1       1      0    1      0       1          0
Rimbaud  1   0     1       1      0    0      0       1          1
The fligth 0 1     0       0      1    1      0       0          1

我希望看到所有顶点之间的交互作用。与此类似的代码:http://sna.stanford.edu/sna_R_labs/output/lab_1/1.3_Krackhardt_Friendship.pdf

任何帮助或指示都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 08:50:04

也许这就是你想要的:

代码语言:javascript
复制
m <- as.matrix(dat)
el <- cbind(m[, 1], c(m[, -1]))

这里,el是一个边列表,它通过绑定m的第一列和一个向量创建,该向量是通过去除矩阵子集m[, 2:3]的维度(相当于m[, -1])而得到的。注意,cbind中的第一个向量有3个元素,而第二个向量有6个元素。第一个将被回收到第二个的长度。我们所做的等同于做cbind(rep(m[, 1], 2), m[, -1])

这是我们的边缘列表的样子。

代码语言:javascript
复制
el
##      [,1]      [,2]        
## [1,] "maman"   "Canada"    
## [2,] "sophia"  "USA"       
## [3,] "Antoine" "Mexico"    
## [4,] "maman"   "Coelho"    
## [5,] "sophia"  "Rimbaud"   
## [6,] "Antoine" "The flight"

现在,我们可以通过使用graph.edgelist绘制边列表并使用get.adjacency提取邻接矩阵来获得邻接矩阵。

代码语言:javascript
复制
get.adjacency(graph.edgelist(el))

## 9 x 9 sparse Matrix of class "dgCMatrix"
##            maman Canada sophia USA Antoine Mexico Coelho Rimbaud The flight
## maman          .      1      .   .       .      .      1       .          .
## Canada         .      .      .   .       .      .      .       .          .
## sophia         .      .      .   1       .      .      .       1          .
## USA            .      .      .   .       .      .      .       .          .
## Antoine        .      .      .   .       .      1      .       .          1
## Mexico         .      .      .   .       .      .      .       .          .
## Coelho         .      .      .   .       .      .      .       .          .
## Rimbaud        .      .      .   .       .      .      .       .          .
## The flight     .      .      .   .       .      .      .       .          .
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29290830

复制
相关文章

相似问题

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