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
任何帮助或指示将不胜感激!
答案 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 . . . . . . . . .