使用R中的边缘属性从邻接列表创建igraph对象

时间:2014-05-28 19:45:50

标签: r igraph

我有一个包含4列的邻接矩阵。前两列是我想在igraph对象中成为顶点的源节点和目标节点。我可以使用下面的代码实现这一点。

al <- data.frame(sourceNode=c('a', 'a', 'b', 'c'), 
             consumerNode=c('b', 'c', 'c', 'a'), 
             edgeAtt1=c('highway', 'road', 'road', 'path'),
             edgeAtt2=c('1999', '2010', '2014', '1999'))

require('igraph')
g <- graph.edgelist(as.matrix(al[,c('sourceNode', 'consumerNode')]))

但是,我想要做的是在创建此igraph对象时将al中的第3列和第4列作为边缘属性。

一些函数functionThatINeed让我可以这样做:

g <- functionThatINeed(al[,c('sourceNode', 'consumerNode')]), edgeAttributes=al[,c('edgeAtt1', 'edgeAtt2')])

2 个答案:

答案 0 :(得分:3)

创建图表时无法执行此操作,但您可以在edge.attributes()

之后立即执行此操作
require('igraph')
g <- graph.edgelist(as.matrix(al[,c('sourceNode', 'consumerNode')]))
edge.attributes(g) <- al[,c('edgeAtt1', 'edgeAtt2')]

如果你真的想,你可以创建自己的功能

graph.edgelist.attributes <- function(et, at=NULL, directed=F) {
    g <- graph.edgelist(el, directed)
    edge.attributes(g) <- at
    g
}

答案 1 :(得分:0)

我想我确实找到了答案。来自igraph包的graph.data.frame允许您从一个边缘列表数据框创建一个igraph对象,该数据框提供边缘属性,另一个data.frame提供节点属性。

http://www.inside-r.org/packages/cran/igraph/docs/graph.data.frame