2012-06-08 14 views
15

Mein generelles Problem ist, dass ich die Scheitelpunktnamen/-bezeichnungen verliere (nicht sicher über das richtige Wort hier), wenn ich ein Diagramm mit iGraph erzeuge.Wo sind die Scheitelpunktnamen in einem iGraph-Graph?

Ich habe eine Kantenliste IC_edge_sub eines zweiteiligen Netzwerk, das wie folgt aussieht:

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

ich dann ein Graph-Element erstellen:

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

Dann ist es kollabiert nur Verbindungen zwischen identifizieren companyIDs

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

Und dann erhalten Sie die Adjazenzmatrix:

In iGraph beginnt die Knotennummerierung bei Null und damit beginnt auch die Matrixbenennung bei Null. Allerdings würde ich stattdessen die "new_companyID" benötigen, wie in der 2. Spalte der Edge-Liste in der eventuellen CC_matrix_IC_based Matrix angegeben.

Können Sie mir helfen, die Informationen aus der ursprünglichen Edgeliste zu verwenden, um in der eventuellen Adjazenzmatrix in rownames und colnames einzutragen?

Ich googelte es und suchte Stapelfluss, aber konnte nicht wirklich eine funktionierende Antwort finden. Vielen Dank für Ihre Hilfe.

+1

Danke an Andrie für die Bearbeitung. Ich hatte die Probleme nicht gesehen, die mein Schreiben verursachte. Schätze es wirklich. – chiron1979

Antwort

22

Vertex-Namen werden normalerweise in einem Vertex-Attribut mit dem Namen name in igraph gespeichert. Wenn also Ihr Graph in der Variablen g gespeichert ist, können Sie V(g)$name verwenden, um die Namen aller Vertices abzurufen.

+1

Leider funktioniert das bei mir nicht. Ich bekomme einfach NULL zurück. Schade. Irgendwelche alternativen Ideen durch Zufall. Tut mir leid, aber ich habe das wirklich richtig verstanden. – chiron1979

+0

Wie erhält man die Beziehung zwischen der numerischen Vertex-ID und dem Namen? – pengchy

1

Ich weiß, ziemlich anmaßend, die eigenen Fragen zu beantworten.

Ich denke, ich habe es gelöst. Das Hauptproblem war, dass ich die Namen beim Generieren des Graphen nicht gespeichert hatte. Danke an Tamas. Ohne ihre Antwort hätte ich das nicht bemerkt. Danach musste ich sicherstellen, dass die Daten nicht verloren gehen. Im Folgenden die Gesamtlösung:

# 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)