R语言igraph如何识别独立子图并为节点分配对应子图编号
R实现图连通分量与节点对应表的代码
你可以直接用igraph内置的components()函数实现需求,该函数会自动识别图中的所有连通分量并给每个节点分配所属分量编号,示例代码如下:
library(igraph) # 构建示例图 a1 <- data.frame(A = c(1,1,2,2,3,7,9,10), B = c(2,3,4,5,6,8,8,11)) a2 <- graph_from_data_frame(a1, directed = F) # 计算连通分量 comp_res <- components(a2) # 生成目标格式数据框 a3 <- data.frame( node = as.integer(names(comp_res$membership)), sub = comp_res$membership ) # 按节点编号升序排序 a3 <- a3[order(a3$node), ]
运行后输出的a3和你要求的格式完全一致:
> a3 node sub 1 1 1 2 2 1 3 3 1 4 4 1 5 5 1 6 6 1 7 7 2 8 8 2 9 9 2 10 10 3 11 11 3
说明:components()默认按照连通分量的节点数从大到小分配编号,和你示例中的编号规则完全匹配。如果需要调整分量编号规则,可对a3$sub列自行重编码即可。
内容的提问来源于stack exchange,提问作者Vesper
相关产品推荐
相关产品推荐

