在R中删除节点后添加回名称

vsaztqbk  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(59)

我正在尝试基于以下解决方案实现此代码:R function to remove nodes from a network one by one and outputting the largest connected component

library(igraph)

g <- graph.data.frame(ws, directed=TRUE)

V(g)$names <- paste0("v", 1:length(V(g))) #assign unique name

  testbet <- function(g){
  n <- length(V(g))
  mat <- matrix(ncol=2,nrow=n, 0)
  mat[,1] <- V(g)$names #add vertex name to matrix
  bet <- betweenness(g)
  mat[,2] <- bet
  matri <- mat[order(mat[,2], decreasing = TRUE),]
  g2 <- g
  clustersizes<-integer(n-1)
  for(i in 1:(n-1)){
    g2 <- delete.vertices(g2, v=which(V(g2)$names==matri[i,1])) #index by name
    maxcsize2 <- max(clusters(g2)$csize)
    clustersizes[i]<-maxcsize2
    }
  df<-as.data.frame(cbind(matri, c(clustersizes, NA)))
  names(df)<-c("vertex_removed", "betweenness", "maxcsize")
  return(df)
 }

df<-testbet(g)

字符串
在运行此程序之前,我通过以下方式定义顶点名称:

countrycodes <- get.data.frame(g, what= c("vertices"))


我想找到一种方法将这些名称添加回df
可复制的示例:

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")

h7appiyu

h7appiyu1#

快速修复

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)
V(g)$names <- paste0("v", 1:length(V(g))) #assign unique name

  testbet <- function(g){
  n <- length(V(g))
  mat <- matrix(ncol=3,nrow=n, 0)                               # <<<<<<<<<<<
  mat[,1] <- V(g)$names #add vertex name to matrix
  bet <- betweenness(g)
  mat[,2] <- bet
  mat[,3] <- V(g)$name                                          # <<<<<<<<<<<
  matri <- mat[order(mat[,2], decreasing = TRUE),]
  g2 <- g
  clustersizes<-integer(n-1)
  for(i in 1:(n-1)){
    g2 <- delete.vertices(g2, v=which(V(g2)$names==matri[i,1])) #index by name
    maxcsize2 <- max(clusters(g2)$csize)
    clustersizes[i]<-maxcsize2
    }
  df<-as.data.frame(cbind(matri, c(clustersizes, NA)))
  names(df)<-c("vertex_removed", "betweenness", "Cn", "maxcsize") #<<<<<<<<<<<<
  return(df)
 }
 
 df <- testbet(g)

字符串

相关问题