【问题标题】:Extracting simplified graph in igraph在 igraph 中提取简化图
【发布时间】:2017-04-08 16:35:52
【问题描述】:

我的网络看起来像这样

library(igraph)
library(igraphdata)

data("kite")
plot(kite)

我运行社区检测,结果如下所示

community <- cluster_fast_greedy(kite)
plot(community,kite)

现在我想提取基于社区的网络。边权重应该是社区之间的联系数(社区相互连接的强度),顶点属性应该是社区中的节点数(称为 numnodes)。

d <- data.frame(E=c(1, 2, 3),
                A=c(2, 3, 1))
g2 <- graph_from_data_frame(d, directed = F)
E(g2)$weight <- c(5, 1, 1)
V(g2)$numnodes <- c(4,3,3)

plot.igraph(g2,vertex.label=V(g2)$name, edge.color="black",edge.width=E(g2)$weight,vertex.size=V(g2)$numnodes)

图表应如下所示 一个节点比其他节点大,一个边与其他边相比具有很大的权重。

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    据我所知,igraph 没有计算连接顶点组的边的方法。因此,要计算连接社区的边,您需要遍历每对社区。要统计每个社区的成员,您可以使用sizes 方法。

    library(igraph)
    library(igraphdata)
    
    data("kite")
    plot(kite)
    
    community <- cluster_fast_greedy(kite)
    plot(community,kite)
    
    cedges <- NULL
    
    for(i in seq(1,max(community$membership) - 1)){
        for(j in seq(i + 1, max(community$membership))){
            imembers <- which(community$membership == i)
            jmembers <- which(community$membership == j)
            weight <- sum(
                mapply(function(v1) mapply(
                    function(v2) are.connected(kite, v1, v2),
                    jmembers),
                imembers)
            )
            cedges <- rbind(cedges, c(i, j, weight))
        }
    }
    
    cedges <- as.data.frame(cedges)
    names(cedges)[3] <- 'weight'
    cgraph <- graph_from_data_frame(cedges, directed = FALSE)
    
    V(cgraph)$numnodes <- sizes(community)
    
    plot.igraph(cgraph,
        vertex.label = V(cgraph)$name,
        edge.color = "black",
        edge.width = E(cgraph)$weight,
        vertex.size = V(cgraph)$numnodes)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 2012-06-21
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多