R语言igraph合并图时丢失边的问题解决求助
解决igraph合并有向图时保留所有边的问题
问题原因
igraph中的%u%(并集)和%du%(分离并集)操作默认处理简单图:会将起点和终点完全相同的有向边视为重复边并自动去重,这就是合并后丢失边的核心原因。若要保留所有原始边(包括重复边,即构建多重图),需要换一种合并逻辑。
解决方案
直接合并两个图的边数据框,再重新构建有向图——graph_from_data_frame默认支持创建包含多重边的图,只要边数据框中存在重复的from-to对,就会完整保留所有边。
完整代码
edge_1 <- data.frame(from = c("E", "D", "D", "A", "E", "D", "D", "B", "F", "A", "F"), to = c("B", "C", "F", "E", "A", "A", "B", "C", "A", "E", "D")) vtx_1 <- data.frame(Names = c("A", "B", "C", "D", "E", "F")) edge_2 <- data.frame(from = c("C", "E", "F", "A", "E", "A", "B", "A", "D", "B", "D"), to = c("F", "C", "C", "E", "A", "C", "C", "E", "F", "C", "C")) vtx_2 <- data.frame(Names = c("A", "B", "C", "D", "E", "F")) library(igraph) g1 <- graph_from_data_frame(edge_1, vertices = vtx_1, directed = TRUE) g2 <- graph_from_data_frame(edge_2, vertices = vtx_2, directed = TRUE) # 合并边数据(保留所有原始边) combined_edges <- rbind(edge_1, edge_2) # 合并顶点数据(若两个图顶点不同,自动去重) combined_vtx <- unique(rbind(vtx_1, vtx_2)) # 构建包含所有边的合并图 g_combined <- graph_from_data_frame(combined_edges, vertices = combined_vtx, directed = TRUE) # 绘图验证 plot(g_combined, edge.arrow.size = 0.5)
效果验证
运行代码后,合并后的图会完整保留g1和g2的所有边:
- 顶点C的入边总数为
g1中的2条加上g2中的6条,总计8条; - 其他顶点的边也无丢失情况,完全符合需求。
内容的提问来源于stack exchange,提问作者Purrsia
相关产品推荐
相关产品推荐

