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

如何在igraph中限制cluster_edge_betweenness的社区数量为2?

解决固定社区数为2时提取成员名称的问题

核心方法是:用cluster_edge_betweenness()生成社区树状结构后,通过cut_at()函数指定k=2强制划分成2个社区,再结合图的顶点名称提取各组成员,替代默认的$membership(默认返回最优模块度对应的社区数)。

下面是完整的模拟数据+循环处理代码,你可以直接套用到自己的月度数据上:

# 加载igraph包
library(igraph)

# 模拟月度社交网络数据:12个月,每个月有不同的节点和互动边
set.seed(123)
monthly_networks <- list()
for (m in 1:12) {
  # 每个月随机生成10-15个节点
  nodes <- paste0("ID_", sample(1:20, size = sample(10:15, 1)))
  # 随机生成无向互动边
  edges <- sample(nodes, size = sample(15:25, 1), replace = TRUE)
  edges <- matrix(edges, ncol = 2)
  # 构建igraph对象
  monthly_networks[[m]] <- graph_from_edgelist(edges, directed = FALSE)
}

# 循环处理每个月度网络,提取2个社区的成员
monthly_communities <- list()
for (m in 1:length(monthly_networks)) {
  g <- monthly_networks[[m]]
  # 运行边介数聚类,生成社区树结构
  cb <- cluster_edge_betweenness(g)
  # 强制切割为2个社区
  membership_2groups <- cut_at(cb, k = 2)
  # 获取当前网络的所有节点名称
  node_names <- V(g)$name
  # 提取两组的成员列表
  group1 <- node_names[membership_2groups == 1]
  group2 <- node_names[membership_2groups == 2]
  # 存储月度结果
  monthly_communities[[m]] <- list(
    month = m,
    group1 = group1,
    group2 = group2
  )
}

# 查看第一个月的分组结果
print(monthly_communities[[1]])

关键细节说明:

  • cut_at(cb, k=2):直接对cluster_edge_betweenness生成的社区树进行切割,指定固定分成2组,返回每个节点对应的社区编号(1或2)。
  • V(g)$name:获取当前月度网络的所有节点名称,和membership_2groups结果一一对应,通过逻辑索引即可快速提取各组成员。
  • 如果你的原始数据是邻接矩阵格式,只需把graph_from_edgelist替换为graph_from_adjacency_matrix就能适配。

内容的提问来源于stack exchange,提问作者JOLy cloé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:47:13