R:邻接矩阵的邻接列表

时间:2015-03-26 23:37:22

标签: r matrix igraph adjacency-list adjacency-matrix

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

我尝试了什么

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

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

首次尝试

library(igraph)     
m<-as.matrix(dat)    
g<-graph.adjacency(m, mode="directed") ### If that worked I could have used      
"get.adjacency" 

第二次尝试

尝试将数据转换为边缘列表,但由于有三列

,因此出现错误
el<-as.matrix(dat)       
g=graph.edgelist(el,directed=TRUE) # turns   

例外输出

     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

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

1 个答案:

答案 0 :(得分:0)

也许这就是你所追求的:

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])

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

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提取邻接矩阵来获得邻接矩阵。

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     .      .      .   .       .      .      .       .          .