Come creare una rete bipartita in R con igraph o tnet

Ho un edgelist per una rete a due modalità, simile a questa:

person Event Amy football_game Sam picnic Bob art_show 

Voglio fare un’analisi su questo in R, ma apparentemente tutto ciò che cerco fallisce. La conversione in una rete a una modalità funziona in limiti di memoria, e non riesco a capire come analizzarlo come bipartito in igraph o tnet.

In igraph, bipartite.projection mi dà tutti i FALSE , sull’object igraph creato usando

 net <- graph.edgelist(myobject) 

Su tnet, non riesco a convertire la rete igraph in una tnet, e quando provo a usare il frame di dati originale, si rifiuta a causa di duplicati nel grafico.

Quindi le risposte ad una delle seguenti cose sarebbero super apprezzate:

    1. Come si usa la funzione bipartite.mapping ?
    2. Come inserisco un object igraph in tnet?
    3. Se tutto il resto fallisce, come faccio a inserire un frame di dati con bordi duplicati in tnet?

    Scusa se queste sono domande di base, ma c’è pochissima documentazione.

    MODIFICARE

    Esempio:

     edgelist <- read.table(text="Person Event Amy football Bob picnic Sam artshow", header=TRUE) edgelist <- as.matrix(edgelist) ## Igraph Issues igraph <- graph.edgelist(edgelist) typevector <- bipartite.projection(igraph) # gets all FALSE edgelist2 <- get.edgelist(igraph) typevector <- bipartite.projection(edgelist2) # same thing ## tnet issues tnet <- as.tnet(edgelist) # gives error: "There are duplicate events in the edgelist" tnet <- as.tnet(edgelist2) clusterMat <- clustering_local_tm(tnet) # gives error: "max not meaningful for factors" onemode <- projecting_tm(tnet, method="Newman") # gives error: "arguments must have same length" 

    In igraph una rete bipartita è una che ha un attributo type vertice. Questo attributo deve essere logico e deve essere TRUE per uno dei tipi di nodo e FALSE per gli altri. Quindi, per creare una rete bipartita dall’elenco dei bordi, devi semplicemente creare un grafico regolare e quindi aggiungere l’attributo vertice di type :

     edgelist <- read.table(text="Person Event Amy football Bob picnic Sam artshow", header=TRUE) igraph <- graph.data.frame(edgelist) V(igraph)$type <- V(igraph)$name %in% edgelist[,1] igraph # IGRAPH DN-B 6 3 -- # + attr: name (v/c), type (v/x) 

    La lettera 'B' ti dice che questo è un grafico bipartito. È ansible creare le proiezioni unipartite di questa rete tramite:

     bipartite.projection(igraph) # $proj1 # IGRAPH UN-B 3 0 -- # + attr: name (v/c), type (v/x) # # $proj2 # IGRAPH UN-B 3 0 -- # + attr: name (v/c), type (v/x) 

    Ciò restituirà un elenco di due grafici. Se pensi che la proiezione potrebbe essere troppo grande, puoi prima chiamare la funzione bipartite.projection.size , questo ti darà il numero di vertici e spigoli in entrambe le proiezioni. Il requisito di memoria per un grafo di igraph è (4m + 2n) * 8 + O (1) byte, dove 'n' è il numero di vertici e 'm' è il numero di spigoli.