igraph - 邻居作为子图 - 使用make_ego_graph()作为单个图

9
我想构建一个有向网络图的子图,其中所有顶点都共享特定的顶点属性(例如,V(Grph)$year == "1952"),并且它们的一阶(直接)邻居,仅基于出度。
我尝试过ego()、make_ego_graph()、neighbors()和adjacent_vertices()等函数。
例如, CitGraph <- make_ego_graph(Grph, 1, nodes = which(V(Grph)$year=="1952"), mode = "out") 生成了一个图列表(而不是一个单独的全面的图),但对于这个年份下的50k个顶点和150k个被指向的邻居意外地需要两个小时。
我能想到的一种方法是将列表中的所有图聚合起来,但不知道如何操作。另外,我希望保留顶点属性,因为我的最终目标是根据另一个顶点属性(在这种情况下是地理位置)计算assortativity_nominal()。
谢谢您提供的任何建议!
1个回答

8

确实,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)

我正在使用有向图。
希望对你有所帮助。

1
太好了,它完美地运行了,谢谢!对于我的示例,我不仅对1952个顶点之间的边感兴趣,而且更广泛地对所有从它们出发的边感兴趣,因此我必须调整您代码的第一行为list_of_edges <- E(your_graph)[from(list_of_vertices)] - user5835099

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