Соответствующие атрибуты вершин в списке крайних списков R - PullRequest
1 голос
/ 23 апреля 2019

У меня есть список направленных сетей

list(structure(list(nominator1 = structure(c(3L, 4L, 1L, 2L), .Label = c("Angela", 
"Jeff", "Jim", "Pam"), class = "factor"), nominee1 = structure(c(1L, 
2L, 3L, 2L), .Label = c("Andy", "Angela", "Jeff"), class = "factor")), class = "data.frame", row.names = c(NA, 
-4L)), structure(list(nominator2 = structure(c(4L, 1L, 2L, 3L
), .Label = c("Eric", "Jamie", "Oscar", "Tim"), class = "factor"), 
    nominee2 = structure(c(1L, 3L, 2L, 3L), .Label = c("Eric", 
    "Oscar", "Tim"), class = "factor")), class = "data.frame", row.names = c(NA, 
-4L)))

, и у меня есть дата-кадр атрибутов вершин людей в разных сетях

structure(list(names = structure(c(6L, 7L, 5L, 2L, 1L, 8L, 3L, 
4L), .Label = c("Andy", "Angela", "Eric", "Jamie", "Jeff", "Jim", 
"Pam", "Tim"), class = "factor"), gender = structure(c(3L, 2L, 
3L, 2L, 3L, 1L, 1L, 2L), .Label = c("", "F", "M"), class = "factor"), 
    happiness = c(8, 9, 4.5, 5.7, 5, 6, 7, 8)), class = "data.frame", row.names = c(NA, 
-8L))

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

Как бы я соответствовал атрибутам вершин в списке списков ребер внутри igraph графических объектов?

Для преобразования краевых списков в графический объект используйте

if(!require(igraph)) install.packages("igraph"); require(igraph)
graphs_list<-lapply(name_of_edgelist_list, graph_from_data_frame)

1 Ответ

1 голос
/ 23 апреля 2019

Не идеальный ответ, но это только для одного атрибута для цикла for

for(i in 1:length(graph_list)){
  graph_list[[i]]=set_vertex_attr(graph_list[[i]],"gender", value=attribute_df$gender[match(V(graph_list[[i]])$name, attribute_df$names)])

}

с graph_list, представляющим список объектов графа, и attribute_df, являющимся фреймом данных ваших атрибутов, которые были

structure(list(names = structure(c(6L, 7L, 5L, 2L, 1L, 8L, 3L, 
4L), .Label = c("Andy", "Angela", "Eric", "Jamie", "Jeff", "Jim", 
"Pam", "Tim"), class = "factor"), gender = structure(c(3L, 2L, 
3L, 2L, 3L, 1L, 1L, 2L), .Label = c("", "F", "M"), class = "factor"), 
    happiness = c(8, 9, 4.5, 5.7, 5, 6, 7, 8)), class = "data.frame", row.names = c(NA, 
-8L))

Тогда вы можете просто изменить цикл (например, сделать attribute_df$happiness, чтобы получить атрибут счастья), чтобы получить каждый из атрибутов. Векторизованный способ был бы лучше, хотя

...