我有大量的邻接矩阵,从excel导出的csv格式。我也有大量的csv。具有顶点属性数据的文件。 我已经在SNA中链接它们但是igraph在功能上更进一步,所以我希望转向它,但我无法构建图形+属性文件。
我希望设置一些代码,这些代码将成为制作一系列情节的主力。 虽然似乎有很多方法可以链接这两个数据集,但这似乎是最简单的: 为了使csv中的邻接矩阵成为一个数据框(减少了丢失的顶点数据)我使用:
m <- read.table(header=TRUE, check.names=FALSE, textConnection("
2 3 4 5 6 7
2 0 1 1 0 1 0
3 1 0 0 0 1 0
4 0 0 0 0 0 0
5 1 0 1 0 0 1
6 0 0 0 0 0 0
7 1 1 0 1 0 0
"))
如果在原始文件中同时包含顶点和行名称,则导入的属性文件具有顶点名称和对应于节点名称的“row.names”。 Hex.ed[1,1]
给出m网络中第一个节点的属性值,即节点2:
Hex.ed <- read.table(header=TRUE, textConnection("
HH Emo Extra Aggr Consci OTE
2 3.3750 3.0000 3.0000 3.0000 3.0625 3.4375
3 3.5625 2.9375 3.0625 3.0000 3.3125 3.6250
4 3.2500 2.8750 3.7500 3.2500 3.8750 3.5000
5 3.6875 3.1250 3.3750 3.5625 3.6250 3.3125
6 3.3125 3.0000 3.3125 3.8750 3.2500 3.6875
7 3.8125 3.2500 3.5625 2.8750 3.6875 3.4375
"))
g <- graph.data.frame(m, directed=TRUE, vertices=Hex.ed)
但是,我收到错误:Error in graph.data.frame(m, directed = TRUE, vertices = Hex.ed) : Duplicate vertex names
答案 0 :(得分:0)
我收到了不同的错误消息:
Error in graph.data.frame(m, directed = TRUE, vertices = Hex.ed) :
Some vertex names in edge list are not listed in vertex data frame
但这是因为您没有在问题中运行示例,但可能使用了您的完整数据集。
无论如何,graph.data.frame
不使用邻接矩阵。来自http://igraph.sourceforge.net/doc/R/graph.data.frame.html的文档:
... d的前两列用作符号边缘列表和 附加列作为边缘属性。属性的名称是 取自列的名称。
如果你关心阅读手册,你会在底部看到一个例子。
如果你有一个邻接矩阵,那么你可以使用graph.adjacency
创建图形,然后逐个添加顶点属性:
g <- graph.adjacency(as.matrix(m))
for (i in seq_len(ncol(Hex.ed))) {
g <- set.vertex.attribute(g, colnames(Hex.ed)[i], value=Hex.ed[,i])
}
g
# IGRAPH DN-- 6 11 --
# + attr: name (v/c), HH (v/n), Emo (v/n), Extra (v/n), Aggr (v/n),
# Consci (v/n), OTE (v/n)