2016-03-21 26 views
8

我想构造一个有向网络图的子图,其中所有的顶点共享某个顶点属性(比如V(Grph)$ year == “1952”)和他们的一阶(立即)邻居,仅基于出境度。我试过ego(),make_ego_graph(),neighbors()adjacent_vertices()igraph - 作为子图的邻居 - make_ego_graph()作为单个图

例如, CitGraph <- make_ego_graph(Grph, 1, nodes = which(V(Grph)$year=="1952"), mode = "out") 产生图表的列表(而不是一个单一的一次),令人惊讶需要两个小时的时间在今年50K顶点和150K的邻居们指出。

我能想到的一种方法是将所有这些图表汇总在列表中,但不知道如何。另外,我想保留顶点属性,因为我的最终目标是根据另一个顶点属性(本例中为地理位置)来计算assortativity_nominal()

在此先感谢您的任何建议!

回答

5

确实make_ego_graph返回列表nodes中每个顶点的邻域图。

我建议你使用你需要包含在你的子图中的边缘列表来代替顶点列表来解决它。假设你的顶点列表解决像list_of_vertices <- V(Grph)$year == "1952"或不管它是你的条件,你会做这样的事情,

list_of_edges <- E(your_graph)[from(list_of_vertices) | to(list_of_vertices)] 
your_subgraph <- subgraph.edges(your_graph, list_of_edges) 

(我用有向图)

希望它能帮助。

+0

太棒了,它完美的工作,谢谢你!对于我的例子,我必须将代码的第一行调整为'list_of_edges < - E(your_graph)[from(list_of_vertices)]',因为我不仅对1952个顶点之间的边缘感兴趣,而且更广泛地说,他们。 – user5835099

+0

你不仅仅是欢迎。干杯。 – lrnzcig