0

私はネットワークデータを操作していますが、Rcount.multipleのパッケージで奇妙な(または少なくとも私はそれを予期していなかった)動作に遭遇しました。igraph

library(igraph)
library(plyr)

df <- data.frame( sender = c( "a", "a", "a", "b", "b", "c","c","d" ),
              receiver = c( "b", "b", "b", "c", "a", "d", "d", "a" ) )

私が欲しいのは、すべてのエッジをカウントし、その倍数を重みとして使用することです。

私が行うddply(df, .(sender, receiver), "nrow")ときの結果は次のとおりです。

  sender receiver nrow
1      a        b    3
2      b        a    1
3      b        c    1
4      c        d    2
5      d        a    1

それが私が期待することです。

しかし、私はこれをigraphを使用して再現することはできませんcount.multiple。これは、igraph内でこれを行うことを期待していたことです。

df.graph <- graph.edgelist(as.matrix(df))
E(df.graph)$weight <- count.multiple(df.graph)

E(df.graph)$weight生成:

3 3 3 1 1 2 2 1

次に、次のsimplifyコマンドを使用しました。

df.graph <- simplify(df.graph)

を生成します

9 1 1 4 1

ここで何が起こっているのかわかります。単純化は重みを追加するだけですが、何をしているのかではなく、なぜ/いつこれが使用されるのかわかりませんddply

何かご意見は?

ありがとう!

4

1 に答える 1

2

のデフォルトの動作はsimplify、複数のエッジの重みを追加することです。

二重カウントを回避するために、初期の重みを1に設定できます。

g <- graph.edgelist(as.matrix(df))
E(g)$weight <- 1
g <- simplify( g )
E(g)$weight

または、それらの集約方法を変更します。

g <- graph.edgelist(as.matrix(df))
E(g)$weight <- count.multiple(g)
g <- simplify( g, edge.attr.comb = list(weight=max, name="concat", "ignore") )
E(g)$weight
于 2012-06-19T23:21:51.120 に答える