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

在R语言中移除节点后恢复顶点原始名称的实现方法

解决方案

直接在代码里维护自定义顶点ID和原始国家名的映射关系,再合并到结果数据框即可,以下是修改后的完整可运行代码:

library(igraph)

# 可复现示例数据
ws <- structure(list(Reporter.Countries = c("Estonia", "Estonia", "Latvia", 
"Uruguay", "Mexico", "Russian Federation", "Lithuania", "China, mainland", 
"Lithuania", "Russian Federation"), Partner.Countries = c("Algeria", 
"Angola", "Algeria", "Algeria", "Algeria", "Afghanistan", "Algeria", 
"Afghanistan", "Angola", "Albania"), Value = c(27150.02, 29001.82, 
57940, 31498.1, 298765.27, 42, 48250, 2564, 41255.03, 143249.35
)), row.names = c(NA, 10L), class = "data.frame")

# 创建有向图对象
g <- graph.data.frame(ws, directed=TRUE)
# 给顶点添加自定义ID(v1、v2...),避免和igraph默认的原始名称属性混淆
V(g)$custom_id <- paste0("v", 1:length(V(g)))

testbet <- function(g){
  n <- length(V(g))
  # 直接整合自定义ID、原始国家名、介数到初始数据框
  mat <- data.frame(
    custom_id = V(g)$custom_id,
    original_country = V(g)$name,  # 这里直接取igraph默认存储的原始顶点名(国家名)
    betweenness = betweenness(g),
    stringsAsFactors = FALSE
  )
  # 按介数降序排序
  matri <- mat[order(mat$betweenness, decreasing = TRUE),]
  g2 <- g
  clustersizes <- integer(n-1)
  # 循环删除顶点并记录最大聚类大小
  for(i in 1:(n-1)){
    g2 <- delete.vertices(g2, v=which(V(g2)$custom_id==matri$custom_id[i]))
    maxcsize2 <- max(clusters(g2)$csize)
    clustersizes[i] <- maxcsize2
  }
  # 追加聚类大小列,最后一行补NA
  matri$maxcsize <- c(clustersizes, NA)
  # 重命名列以匹配需求
  names(matri) <- c("vertex_removed", "original_country_name", "betweenness", "maxcsize")
  return(matri)
}

# 生成包含原始国家名的结果数据框
df <- testbet(g)

关键改动说明

  • 将自定义顶点ID的属性名改为custom_id,避免和igraph默认的name属性(存储原始国家名)冲突
  • 在函数内直接调用V(g)$name获取原始顶点名称,无需额外导出countrycodes数据框
  • 全程用数据框替代矩阵操作,更便于后续列的追加和合并

内容的提问来源于stack exchange,提问作者MoonS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:10:33