[英]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.