2016-08-23 9 views
0

私は単純な解決策を見つけることができなかった単純な問題があります。私は10個のノードigraph:2つのノードの値の差を計算し、その結果を接続端に格納する方法

require(igraph) 
g <- ba.game(10, directed = FALSE) 
g[V(g), V(g)] <- TRUE 
g <- simplify(g) 

ノードの属性value番号が含まれているだけでなく、欠損値を持つことができるの完全グラフを持っています。

set.seed(2) 
df <- data.frame(id = 1:10, 
       value = sample(c(1:10, NA), 10, replace = T)) 
V(g)$value <- df$value 

ここで、ノードの値の差を計算して、対応するエッジに格納します。グラフのエッジリストを作成します。

el <- as.data.frame(get.edgelist(g)) 

各ノードに対応する値を追加します。

el <- merge(el, df, by.x = 'V1', by.y = 'id') 
el <- merge(el, df, by.x = 'V2', by.y = 'id') 

と私は縁にedgelistから値を差し込む場合、私はタスク

E(g)$diff <- el$diff 

完了しなければならないことを前提となる。この時点で

el$diff <- abs(el$value.x - el$value.y) 

絶対差を計算しますとにかく実際にはエッジが注文されていないようですが、実際にはそうしています

plot(g, vertex.label = V(g)$value, edge.label = E(g)$diff) 

すぐに何かがうまくいかず、エッジ値がランダムに分散していることがわかります。

enter image description here

答えて

0

E(g)は、ELの行とは異なる順序でedgelistを返します。クイックフィックスとして、「by.x = 'V2'」が最初で、「by.x = 'V1'」が2番目になるように、2つの呼び出しをmergeする順序を変更します。

関連する問題