2016-11-11 7 views
0

Liebe Stackoverflow Gemeinschaft,R/Netzwerkanalyse - Wie Kanten Attribute von Knoten erstellen

ich derzeit R bin mit einem Mitgliederprogramm zu kompilieren, wo Knoten sind Unternehmen/Dachorganisationen und Beziehungen werden als „Mitglied“ definiert. Im Moment ist meine Liste noch klein und ich kann Kanten wie folgt erstellen, basierend auf der Position der Knoten (ich benutze IGRAPH):

g <- igraph::add_edges(g, c(1,51, 
          1,52, 
          1,53, 
          1,54)) 

Ich bin jedoch das Hinzufügen neuer Knoten und die endgültige Netzwerk gehören mindestens 500 Organisationen. Das bedeutet, dass sich die Position eines Knotens ändern kann, wenn ich einen neuen hinzufüge. Da ich die Kanten nicht jedes Mal neu erstellen kann, wenn ich einen neuen Knoten hinzufüge, gibt es eine Möglichkeit, Kanten hinzuzufügen, die die Namen der Knoten kennen.

Die Namen der Knoten als ein Attribut behandelt werden, habe ich versucht, wie oben beschrieben, einschließlich Namen den gleichen Befehl zu verwenden - wie an Positionen gegen - aber es hat nicht funktioniert:

g <- igraph::add_edges(g, c(V(g)$name=="Company1", V(g)$name == "Umbrella2")) 

Jeder Vorschlag, wie ich könnte Kanten erstellen, indem Sie die Namen und nicht die Position angeben?

Antwort

0

Ich glaube, Sie suchen nach as.numeric(V(g)["Company1"]).

würde ich beraten stark gegen Ihre Netzstruktur Aufbau in ein R-Skript, though. Selbst für ein kleines Netzwerk hätte ich meine Daten in einer Excel-Datei eingegeben, ein R-Skript erstellt, das die Daten als Kantenliste liest und daraus ein Sigel erstellt. Auf diese Weise können Sie Ihre Unternehmen und Organisationen hinzufügen, während Sie die Übersicht darüber behalten, welche Daten tatsächlich in Ihr Netzwerk gelangt sind. Ich denke, dass Sie genau das suchen, wonach Sie suchen. Das hier zu tun würde für die Frage allerdings nicht in Frage kommen.

Wie für die adding-Nodes-by-Name, schrieb ich dieses Beispiel für Sie, die ich hoffe, ist pädagogisch.

library(igraph) 

# Make an empty Bipartite graph 
g <- make_bipartite_graph(0, NULL, directed=TRUE) 
g <- delete_vertices(g, 1) 


# Create vertices of two different types: companies and umbrellas 
g <- add_vertices(g, 5, color = "red", type=TRUE, name=paste("Company", 1:5, sep="_")) 
g <- add_vertices(g, 2, color = "blue", type=FALSE, name=paste("Umbrella", 1:2, sep="_")) 

# In a bipartate graph edges may only appear BETWEEN verticies of different types. Companies 
# can belong to umbrellas, but not to each other. 

# Look at the types: 
ifelse(V(g)$type, 'Company', 'Umbrella') # true for companies, false for umbrellas 

# Lets add some edges one by one. This is what I believe you're asking for in the question: 
g <- add_edges(g, c(as.numeric(V(g)["Company_1"]), as.numeric(V(g)["Umbrella_1"]))) 
g <- add_edges(g, c(as.numeric(V(g)["Company_1"]), as.numeric(V(g)["Umbrella_2"]))) 
g <- add_edges(g, c(as.numeric(V(g)["Company_2"]), as.numeric(V(g)["Umbrella_1"]))) 
g <- add_edges(g, c(as.numeric(V(g)["Company_3"]), as.numeric(V(g)["Umbrella_1"]))) 
g <- add_edges(g, c(as.numeric(V(g)["Company_4"]), as.numeric(V(g)["Umbrella_2"]))) 
g <- add_edges(g, c(as.numeric(V(g)["Company_5"]), as.numeric(V(g)["Umbrella_2"]))) 

# Note that "Company_1" belongs to two umbrella organisations, as I assume your companies can: 
plot(g) 
+0

Vielen Dank, das war sehr nützlich. Der Befehl hat an meinen aktuellen Daten gearbeitet, aber ich stimme zu, dass ich zuerst eine Excel-Tabelle kompilieren sollte. –

Verwandte Themen