You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:45:38