2012-11-02 15 views
7

La relazione è espressa come una matrice x simili:Come creare un elenco di spigoli da una matrice in R?

 A B C  D 
A  0 2 1  1 
B  2 0 1  0 
C  1 1 0  1 
D  1 0 1  0 

Le voci si riferiscono al numero di connessioni che hanno. Qualcuno potrebbe mostrarmi come scriverlo come una lista di bordo? Grazie! Sto considerando di scrivere come una lista di bordo come:

A B 
A B 
A C 
A D 
B C 

Ma è questa lista bordo destro se voglio creare un grafico di rete? Grazie!

risposta

19

Usando il pacchetto igraph:

x <- matrix(c(0,2,1,1,2,0,1,0,1,1,0,1,1,0,1,0), 4, 4) 
rownames(x) <- colnames(x) <- LETTERS[1:4] 

library(igraph) 
g <- graph.adjacency(x) 
get.edgelist(g) 

#  [,1] [,2] 
# [1,] "A" "B" 
# [2,] "A" "B" 
# [3,] "A" "C" 
# [4,] "A" "D" 
# [5,] "B" "A" 
# [6,] "B" "A" 
# [7,] "B" "C" 
# [8,] "C" "A" 
# [9,] "C" "B" 
# [10,] "C" "D" 
# [11,] "D" "A" 
# [12,] "D" "C" 

Io consiglio anche di trascorrere del tempo a leggere la documentazione igraph a http://igraph.sourceforge.net/index.html dal momento che un sacco delle sue recenti domande sono tutte semplici usi di casi.

(Come bonus, plot(g) sarà rispondere alla tua altra domanda How to plot relationships in R?)

+0

Grazie per tutto il vostro gentile aiuto! Sto leggendo il file che mi raccomando ora. – user1787675

1

Prova questo

M <- matrix(c(0,2,1,1,2,0,1,0,1,1,0,1,1,0,1,0), 4, 4, dimnames=list(c("A","B","C","D"), c("A","B","C","D"))) 

eList <- NULL 
for (i in 1:nrow(M)){ 
    for (j in 1:ncol(M)) { 
    eList <- c(eList, rep(paste(dimnames(M)[[1]][i], dimnames(M)[[2]][j]), M[i,j])) 
    } 
} 

uscita

> eList 
[1] "A B" "A B" "A C" "A D" "B A" "B A" "B C" "C A" "C B" "C D" "D A" "D C" 
+0

Qual è il contrario della tua soluzione? Voglio dire se abbiamo una lista di spigoli e vogliamo convertirla in una matrice di adiacenza a modo tuo? – minoo

8

utilizzando melt in reshape2, e quindi eliminare il peso == 0. se non è necessario stampare il peso. basta cancellarlo

x 
    sample1 sample2 sample3 sample4 
feature1  0  2  1  1 
feature2  2  0  1  0 
feature3  1  1  0  1 
feature4  1  0  1  0 

melt(x) 
    Var1 Var2 value 
1 feature1 sample1  0 
2 feature2 sample1  2 
3 feature3 sample1  1 
4 feature4 sample1  1 
5 feature1 sample2  2