2016-11-11 23 views
0

Уважаемые StackOverflow сообщества,R/Network Analysis - Как создать края с помощью атрибутов узла

Я в настоящее время используется R компилировать аффилированности сети, в которой узлы являются компании/зонтичные организации и связи определяются как «член». На данный момент мой список еще мал, и я могу создать края, как следовать, основываясь на положении узлов (я использую igraph):

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

Однако, я добавляю новые узлы и конечная сеть будет включать в себя не менее 500 организаций. Это означает, что позиция узла может меняться каждый раз, когда я добавляю новый. Поскольку я не могу повторять ребра каждый раз, когда добавляю новый узел, есть ли способ добавить ребра, зная имена узлов?

Названия узлов рассматриваются как атрибут, я попытался использовать ту же команду, как указано выше, в том числе имена - в отличие от позиций - но это не сработало:

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

Любое предложение о том, как я может создать ребра, указав имена, а не позицию?

ответ

0

Я считаю, что вы ищете as.numeric(V(g)["Company1"]).

Я бы настоятельно рекомендуем против строить свою структуру сети в R-сценарий, хотя. Даже для небольшой сети я бы ввел свои данные в excel-файл, создав R-скрипт, который считывает данные в виде краевого списка и создает из него igraph. Таким образом, вы можете добавить свои компании и организации, как вы идете с большим контролем над тем, какие данные действительно вошли в вашу сеть, и я думаю, это то, что вы ищете в первую очередь. Однако делать это было бы за грань за вопрос.

Что касается добавочных узлов по имени, я написал этот пример для вас, который, я надеюсь, является педагогическим.

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

Спасибо, это было очень полезно. Команда работала над моими текущими данными, но я согласен, что сначала должен скомпилировать электронную таблицу Excel. –

 Смежные вопросы

  • Нет связанных вопросов^_^