2017-06-27 24 views
1

Iエージェントは次のようにノード2ためにノード1から移動有向グラフを有するに重みを加える私は無向一つに、この有向グラフを変更したい無向グラフに有向グラフに変換し、R

node1 node2 flow 
A B 12 
B A 6 
C A 1 
D B 3 
E A 4 
A E 10 
E B 1 
B E 2 

以下、エッジ間のフローを合計して、結果をレンダリングします。

node1 node2 flow 
A B 18 
C A 1 
D B 3 
A E 14 
B E 3 

エッジ上に個々のIDベースを作成しようとしましたが、成功しませんでした。

どのようにすればいいですか?

答えて

2

関数as.undirectedを引数edge.attr.combsumに設定して使用できます。次いで

library(igraph) 

weighted_edgelist <- data.frame(
    node1 = c("A", "B", "C", "D", "E", "A", "E", "B"), 
    node2 = c("B", "A", "A", "B", "A", "E", "B", "E"), 
    flow = c(12, 6, 1, 3, 4, 10, 1, 2) 
) 

directed_graph <- graph.data.frame(weighted_edgelist, directed = TRUE) 

AND(あなたの場合、流れの中で)エッジの重みを合計する、無向エッジに有向辺を縮小:

undirected_graph <- as.undirected(directed_graph, 
            mode = "collapse", edge.attr.comb = "sum") 

結果:

res <- data.frame(get.edgelist(undirected_graph), 
        get.edge.attribute(undirected_graph, "flow")) 
colnames(res) <- c("node1", "node2", "flow") 
res 

    node1 node2 flow 
1  A  B 18 
2  A  C 1 
3  B  D 3 
4  A  E 14 
5  B  E 3 
まず有向グラフを生成します
関連する問題