R中的邻接矩阵

10

我想从一个包含以下信息的csv文件中找到邻接矩阵:

A B 
1 2
1 3
1 4
2 5
3 7

等等,有100个节点,但每次我尝试创建一个矩阵并随后绘制图形时,出现的错误是它是一个非方阵。有人能帮我提供R语言的正确代码吗?


你用什么代码来“创建矩阵”和“绘制图形”?在我看来,你的CSV有两列和许多行,当读入一个表格/矩阵时,它当然不是方形的。 - mathematical.coffee
没错,它确实有2列和很多行...我能否使用这些数据创建一个邻接矩阵呢?我正在尝试使用as.matrix和graph.adjacency函数。 - user2203793
2个回答

22

你手头的是一个边缘列表。你可以从中构建一个图,然后将其转换为邻接矩阵:

library(igraph)

dat <- read.table(text="A B 
1 2
1 3
1 4
2 5
3 7", header=TRUE)

get.adjacency(graph.edgelist(as.matrix(dat), directed=FALSE))

那给了

7 x 7 sparse Matrix of class "dgCMatrix"

[1,] . 1 1 1 . . .
[2,] 1 . . . 1 . .
[3,] 1 . . . . . 1
[4,] 1 . . . . . .
[5,] . 1 . . . . .
[6,] . . . . . . .
[7,] . . 1 . . . .

问题在于我无法手动输入数据,而且代码不能处理csv文件。它仍然会出现相同的错误 - graph.edgelist需要一个有两列的矩阵。 - user2203793
3
你知道如何使用类似于 dat <- read.csv("path/to/file.csv", header=TRUE) 的代码从 csv 文件中读取表格数据吗?Brian的答案很好,但他(合理地)假设你已经将数据读入了一个两列数据框中... - Josh O'Brien

10
也许可以这样表达:

可能是这样的:

dat <- read.table(text="A B 
1 2
1 3
1 4
2 5
3 7", header=TRUE)

x <- table(dat)
x %*% t(x)

但也许你实际上需要的是:igraph::graph.data.frame

我认为你的第二个答案是OP所需要的 - ?graph.data.frame?graph.constructors将提供更多信息。 - thelatemail
问题在于我无法手动输入数据,而且代码对于 CSV 文件也不起作用。它再次显示相同的错误—— graph.edgelist 需要一个具有两列的矩阵。而 graph.data.frame 也没有给出结果。 - user2203793

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接