2009-07-23 3 views
10

私は、Nノード間のエッジ重みを詳述するデータフレームを持っています。この種のデータを扱うためのパッケージはありますか?Rのネットワークデータの操作

例えば、私は、ネットワークとして、以下の情報をプロットしたいと思います:

p1 p2 counts 
1 a b 100 
2 a c 200 
3 a d 100 
4 b c  80 
5 b d  90 
6 b e 100 
7 c d 100 
8 c e  40 
9 d e  60 

答えて

14

1つのオプションはnetworkパッケージ、統計的、社会的ネットワーク分析のためのRパッケージのstatnet家族の一員です。これは、ネットワークデータを疎な方法で処理します。これは、大規模なデータセットに適しています。ネットワークオブジェクト

    • 負荷edgelist(最初の2列)の重量と呼ばれるエッジ属性であることカウントを割り当てる:以下

      は、私は、次を行います。

    • gplotを使用してネットワークをプロットします。
    • をプロットすると、(i、j)セルが相対カウントで網掛けされている隣接マトリックスを表すブロックの5x5セットだけがプロットされます)
     
    A = read.table(file="so.txt",header=T) 
    A 
         p1 p2 counts 
        1 a b 100 
        2 a c 200 
        3 a d 100 
        4 b c  80 
        5 b d  90 
        6 b e 100 
        7 c d 100 
        8 c e  40 
        9 d e  60 
    
    library(network) 
    net = network(A[,1:2]) 
    # Get summary information about your network 
    net 
        Network attributes: 
         vertices = 5 
         directed = TRUE 
         hyper = FALSE 
         loops = FALSE 
         multiple = FALSE 
         bipartite = FALSE 
         total edges= 9 
         missing edges= 0 
         non-missing edges= 9 
         Vertex attribute names: 
         vertex.names 
        adjacency matrix: 
         a b c d e 
        a 0 1 1 1 0 
        b 0 0 1 1 1 
        c 0 0 0 1 1 
        d 0 0 0 0 1 
        e 0 0 0 0 0 
    
    set.edge.attribute(net,"weight",A[,3]) 
    gplot(net) 
    
    ## Another cool feature 
    s = as.sociomatrix(net,attrname="weight") 
    plot.sociomatrix(s) 
    
  • +0

    偉大な答え!非常に役立ちます! – RHelp

    4

    はここigraph内のデータのネットワークプロットを作成する方法は次のとおりです。

    d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'), 
           p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'), 
           counts=c(100, 200, 100,80, 90,100, 100,40,60)) 
    
    library(igraph) 
    g <- graph.data.frame(d, directed=TRUE) 
    print(g, e=TRUE, v=TRUE) 
    tkplot(g, vertex.label=V(g)$name) 
    
    0

    私もIGRAPHに取り組んできました。グラフを作成する1つの方法は、すべての ""から ""へのノードのリストをテキストファイルに書き出し、それをグラフオブジェクトとして読み戻すことです。グラフオブジェクトは、多くのグラフ理論プロセスを受けることができ、非常に大きなネットワークを扱うことができます。

    0

    私の経験では、igraphは大規模なグラフ理論的作業のための私の好きなパッケージです。それはメモリ効率的で、いくつかの非常に良いアルゴリズムを持っています。 igraphは内部のエッジリスト型のデータ構造を使用します。
    私は「sna」パッケージ(「ソーシャルネットワーク分析」)を使用する傾向があります。インタラクティブな仕事や小さなネットワークのプロットには最適です。 snaは、より多くの隣接行列データ構造を使用します。

    +0

    ネットワークパッケージには、疎な実装もあります。 –