IGRAPH

2017-04-08 7 views
1

に、簡略化されたグラフを抽出する私はコミュニティの検出を実行し、その結果がこのIGRAPH

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

The result of the community detection mapped on the network

のように見えるこの

library(igraph) 
library(igraphdata) 

data("kite") 
plot(kite) 

The graph I am working with

のように見えるネットワークを持っています

今、私は、コミュニティ。エッジウェイトはコミュニティ間の結び付きの数でなければなりません(コミュニティがどれほど強くつながっているか)。頂点の属性はコミュニティ内のノードの数でなければなりません(numnodesと呼ばれます)。グラフはこの Final product 1つのノードのようになるはず

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) 

は、一方の縁部は、他と比較して体重の多くを有し、他のものよりも大きくなっています。

答えて

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)