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
任何帮助或指示都将不胜感激!
发布于 2015-03-27 08:50:04
也许这就是你想要的:
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 . . . . . . . . .https://stackoverflow.com/questions/29290830
复制相似问题