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

如何通过igraph提取网络各集群中的节点名称?

解决方案:提取igraph集群节点及识别特定节点

嘿,我来帮你搞定这个问题!首先纠正一个小误区:你用到的clusters()函数是igraph包自带的,不需要加载cluster包(那是用于其他聚类算法的包),接下来一步步实现你的需求:

1. 提取每个集群的节点名称

igraph的clusters()函数返回的结果里,membership字段记录了每个节点所属的集群编号,我们可以用它来分组提取节点名称:

library(igraph)

# 构建网络(优化了你的代码,给列名起更清晰的名字)
network_billing <- data.frame(
  Source = Billing_tree$Source,
  Target = Billing_tree$Target
)
net_billing <- graph_from_data_frame(d = network_billing)

# 获取完整的集群信息
cluster_details <- clusters(net_billing)

# 按集群分组提取节点名称
cluster_node_names <- split(V(net_billing)$name, cluster_details$membership)

执行后,cluster_node_names是一个列表,每个元素对应一个集群的节点名称向量(比如cluster_node_names[[1]]就是第一个集群的所有节点)。

2. 统计2节点规模集群的节点数量

从cluster_details$csize(各集群的节点数)里筛选出等于2的集群,再计算对应的节点总数:

# 统计有多少个2节点规模的集群
two_node_cluster_num <- sum(cluster_details$csize == 2)

# 这些集群的总节点数
two_node_total_nodes <- two_node_cluster_num * 2

3. 识别仅与单个节点连接的节点

这类节点的度(degree)为1,可以用igraph的degree()函数直接筛选:

# 获取所有仅连接单个节点的节点名称
single_connection_nodes <- V(net_billing)$name[degree(net_billing) == 1]

如果你想要排除掉2节点集群里的度为1节点(因为这类集群里的每个节点自然都只连一个节点),可以这样做:

# 先提取所有2节点集群的节点
two_cluster_all_nodes <- unlist(cluster_node_names[cluster_details$csize == 2])

# 筛选出不属于2节点集群的单连接节点
single_connection_non_two_cluster <- setdiff(single_connection_nodes, two_cluster_all_nodes)

内容的提问来源于stack exchange,提问作者Jim.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:13