いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】グラフを隣接行列に変換したい

・お題:エッジリストを入手したけれど、所用で隣接行列を入手したくなった。igraphを使って変換してみたい。

 

・公式にやり方が書いてあった。

igraph.org

 

・ライブラリを読み込む。

> library(igraph)

・データを読み込む。今回のデータは、重み付きのエッジリスト。

> d <- read.table("test1.txt", header=FALSE)
> d

・とりあえず、重みをもたない無向グラフとして読み込んでみる。

> g <- graph.data.frame(d[1:2], directed=FALSE)
> plot(g)

・隣接行列に変換してみる。
> as_adjacency_matrix(g)

・見事に対称行列になっている。ただ、ぽっちが気になるので、これをゼロにしたい。

> as_adjacency_matrix(g,
+                     sparse = FALSE)

・次に、有向行列もやってみる。

> g <- graph.data.frame(d[1:2], directed=TRUE)
> plot(g)

> as_adjacency_matrix(g,
+                     sparse = FALSE)

・見てみると、対称行列ではなくなっている。AからBへはエッジが伸びているが、BからAにはエッジが伸びていない。

・次に、重み付き有向グラフを考えてみる。

> g <- graph.data.frame(d[1:2], directed=TRUE)
> E(g)$weight <- d[ [3] ]
> plot(g,
+      edge.width = E(g)$weight)

> as_adjacency_matrix(g,
+                     sparse = FALSE,
+                     attr = "weight")

・今までは、エッジが伸びている/いないの1/0だったが、今回は重みが入っている。BからCへ、重み2のエッジが伸びていることが分かる。

・ちなみに、エッジリストはget.data.frame関数で取れそう。

> get.data.frame(g)

・as_adj_list関数だと予想と違うものが返ってきた。

 

おわり。