簡體   English   中英

R:鄰接表到鄰接矩陣

[英]R: Adjacency list to Adjacency matrix

卓悅,我想將一個鄰接列表(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

任何幫助或指示,將不勝感激!

也許這就是您所追求的:

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繪制邊緣列表並使用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     .      .      .   .       .      .      .       .          .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM