web-dev-qa-db-ja.com

iGraphグラフの頂点名はどこにありますか

私の一般的な問題は、iGraphを使用してグラフを生成するときに、頂点の名前/ラベル(ここで正しい単語がわからない)を失うことです。

次のような2部ネットワークのエッジリストIC_Edge_subがあります。

  new_individualID new_companyID
1             <NA>     10024354c
3        10069415i      2020225c
4        10069415i     16020347c
5        10069272i      2020225c
6        10069272i     16020347c
7        10069274i      2020225c

次に、グラフ要素を作成します。

IC_projected_graphs <- bipartite.projection(IC_twomode, types = 
                         is.bipartite(IC_twomode)$type)

次に、それを折りたたんで、companyID間の接続のみを識別します

IC_projected_graphs <- bipartite.projection(IC_twomode, types =   
                         is.bipartite(IC_twomode)$type)

そして、隣接行列を取得します。

CC_matrix_IC_based <- get.adjacency(CC_graph_IC_based); CC_matrix_IC_based

IGraphでは、ノードの番号付けはゼロから始まり、したがって行列の命名もゼロから始まります。ただし、代わりに、最終的なCC_matrix_IC_basedマトリックスのエッジリストの2番目の列で指定されている「new_companyID」が必要になります。

元のエッジリストからの情報を使用して、最終的な隣接行列に行名と列名を入力する方法を教えてください。

私はそれをグーグルで検索してスタックフローを検索しましたが、実際に有効な答えを見つけることができませんでした。あなたの助けをどうもありがとう

16

頂点名は通常、igraphのnameという名前の頂点属性に格納されます。したがって、グラフが変数gに格納されている場合は、V(g)$nameを使用してすべての頂点の名前を取得できます。

24
Tamás

私は知っています、自分の質問に答えるのはかなり思いがけないことです。

私はそれを解決したと思います。重要な問題は、グラフを生成するときに名前を保存していなかったことです。タマスに感謝します。彼女の答えがなければ、私はそれを理解していなかっただろう。その後、データを失わないようにする必要がありました。以下の全体的なソリューション:

  # Subsetting / triangulating data for selected games
      GC_Edge_sub <- subset (GC_Edge, mb_titleID %in% loggames_yearly_sample$mb_titleID)
      GC_Edge_sub <- subset(GC_Edge_sub, select=c("new_titleID", "new_companyID"))
      head(GC_Edge_sub)

  # Generating the vertex names
      vertex_new_companyID <- data.frame(names = unique(GC_Edge_sub$new_companyID))
      vertex_new_titleID <- data.frame(names = unique(GC_Edge_sub$new_titleID))
      vertex <- rbind(vertex_new_companyID,vertex_new_titleID)

  # Creation of GC_twomode
    GC_twomode <- graph.data.frame(GC_Edge_sub, vertices = vertex)
    GC_projected_graphs <- bipartite.projection(GC_twomode, types = is.bipartite(GC_twomode)$type)
    GC_matrix_GC_based <- get.adjacency(GC_twomode)
    dim(GC_matrix_GC_based)

  # Collapsing the matrix
      # Be aware that if you use the classical command # CC_graph_GC_based <- GC_projected_graphs$proj2 it collapses, but looses the colnames and rownames
      # I thus a) create a subset of the adjacency matrix and b) create the lookef for matrix by multiplication    
        rowtokeep <- match(vertex_new_companyID$names,colnames(GC_matrix_GC_based))
        coltokeep <- match(vertex_new_titleID$names,rownames(GC_matrix_GC_based))
        GC_matrix_GC_based_redux <- GC_matrix_GC_based[rowtokeep,coltokeep]
    # We now have a CG matrix.Let's build from this a GG matrix.
        CC <- GC_matrix_GC_based_redux %*% t(GC_matrix_GC_based_redux)
2