2012-11-02 9 views
7

Die Beziehung wird als Matrix x wie folgt ausgedrückt:Wie erstellt man eine Kantenliste aus einer Matrix 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 

Die Einträge auf der Anzahl der Verbindungen beziehen sie haben. Kann mir jemand zeigen, wie man es als eine Kantenliste schreibt? Vielen Dank! Ich betrachte es als eine Kantenliste zu schreiben wie:

A B 
A B 
A C 
A D 
B C 

Aber ist diese Kantenliste richtig, wenn ich ein Netzwerk Plot erstellen? Vielen Dank!

Antwort

19

Mit dem igraph Paket:

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" 

Ich würde auch empfehlen Sie einige Zeit mit dem Lesen der igraph Dokumentation bei http://igraph.sourceforge.net/index.html verbringen, da viele Ihrer letzten Fragen alle einfachen Verwendungen Fall sind.

(Als Bonus plot(g) wird Ihre andere Frage How to plot relationships in R? beantworten)

+0

Vielen Dank für Ihre freundliche Hilfe! Ich lese die Datei, die Sie jetzt empfehlen. – user1787675

1

Versuchen Sie, diese

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])) 
    } 
} 

Ausgabe

> 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

Was ist umgekehrt von Ihrer Lösung? Ich meine, wenn wir eine Kantenliste hätten und sie auf eine Art in eine Adjazenzmatrix umwandeln wollen? – minoo

8

mit melt in reshape2, und löschen Sie das Gewicht == 0. wenn Sie das Gewicht nicht drucken müssen. lösche es einfach.

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