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

R语言igraph中合并顶点:保留属性与移除冗余顶点的问题

解决igraph contract函数的两个核心问题

1. 保留顶点属性类型并灵活处理合并值

vertex.attr.comb支持为每个属性单独指定合并逻辑,不用全局套用同一个规则,完美适配字符型、数值型混合的场景:

  • 若组内属性值重复(比如你的character属性),用first/last直接取单一值,保留原始数据类型;
  • 若组内属性值不同,想保留全部值,用list将属性存为列表(原始类型不受损);
  • 若需要数值型属性的单一计算值(如均值、唯一值),可以自定义函数。

示例代码:

library(igraph)

G <- graph.ring(10)
V(G)$character <- rep(c("attr1","attr2"),5)
V(G)$numeric <- rep(1:5,2)
V(G)$newId <- c(1,2,3,3,5,6,7,7,9,10)

# 为不同属性配置合并规则
attr_comb <- list(
  character = "first",  # 取组内第一个字符值,保留字符类型
  numeric = function(x) unique(x),  # 提取组内唯一数值,保留数值类型
  newId = "first"  # 保留组ID标识
)

G1 <- contract(G, V(G)$newId, vertex.attr.comb = attr_comb)

# 验证属性类型和结果
str(V(G1)$character)
str(V(G1)$numeric)

如果要保留组内所有属性值(比如字符型存为向量),把对应规则改成list即可:

attr_comb <- list(
  character = list,
  numeric = list,
  newId = "first"
)

2. 清理合并后的冗余顶点

contract函数本身会将同组顶点合并为一个,生成的新图中不会存在原有的被折叠顶点(比如你提到的4、8)。如果出现孤立顶点(合并后无连接的组),直接移除度为0的顶点即可,简洁写法:

# 移除孤立顶点
G1 <- delete.vertices(G1, degree(G1) == 0)

内容的提问来源于stack exchange,提问作者Sebastián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:07:08