2012-06-08 15 views
15

Il mio problema generale è che perdo i nomi/etichette dei vertici (non sono sicuro della parola giusta qui) quando si genera un grafico usando iGraph.Dove sono i nomi dei vertici in un grafico iGraph

Ho una lista bordo IC_edge_sub di una rete bipartita, che appare come il seguente:

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

Ho quindi creare un elemento grafico:

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

Poi comprimerla per identificare solo i collegamenti tra companyIDs

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

e quindi ottenere la matrice di adiacenza:

CC_matrix_IC_based <- get.adjacency(CC_graph_IC_based); CC_matrix_IC_based 

Nella numerazione dei nodi iGraf inizia da zero e quindi anche la denominazione della matrice inizia da zero. Tuttavia, vorrei invece il "new_companyID" come specificato nella seconda colonna di edgelist nell'eventuale matrice CC_matrix_IC_based.

Potete aiutarmi come utilizzare il modulo di informazione l'edgelist originale da inserire in rownames e colnames nell'eventuale matrice di adiacenza?

Ho cercato su Google e cercato il flusso dello stack, ma non sono riuscito a trovare una risposta funzionante. Grazie mille per il vostro aiuto

+1

grazie ad Andrie per la modifica. Non avevo visto i problemi creati dalla mia scrittura. Lo apprezzo davvero. – chiron1979

risposta

22

I nomi dei vertici vengono solitamente memorizzati in un attributo vertice denominato name in igraph. Pertanto, se il grafico è memorizzato nella variabile g, è possibile utilizzare V(g)$name per recuperare i nomi di tutti i vertici.

+1

sfortunatamente questo non funziona nel mio caso. Ho semplicemente restituito NULL. Peccato. Eventuali idee alternative per caso. Scusate, ma sono davvero impressionato da questo. – chiron1979

+0

Come ottenere la relazione dell'ID e del nome del vertice numerico? – pengchy

1

Lo so, piuttosto presuntuoso per rispondere alle proprie domande.

Penso di averlo risolto. Il problema chiave era che non avevo salvato i nomi durante la generazione del grafico. Grazie a Tamas. Senza la sua risposta non me ne sarei reso conto. In seguito dovevo assicurarmi di non perdere i dati. Di seguito la soluzione generale:

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