Добавить атрибуты (пол) к вершине в списке ребер

#r #igraph

#r #igraph

Вопрос:

У меня есть список ребер репродуктивных пар следующим образом:

male_ID=c(1,2,3,4,5), female_ID=c(6,7,8,9,10), a=cbind(male_ID, female_ID)

используя Igraph, я сгенерировал график из данных, чтобы построить график и выполнить некоторый анализ для полного df:

g <- graph_from_data_frame(a)

Мой вопрос в том, могу ли я теперь добавить атрибут (для цветных вершин) для пола человека на основе столбца, в котором они перечислены в списке ребер?

Ответ №1:

вы можете назначить групповые метки своему объекту graph.

Для создания группового вектора «пол» в вашем фрейме данных предполагается, что у вас столько же мужчин, сколько и женщин. graph_from_data_frame() помещает столбцы mal_ID и female_ID друг под другом, которые вы можете проверить с помощью igraph::V(g) . Следовательно, вы можете получить групповой вектор из этой информации:

 
male_ID=c(1,2,3,4,5); female_ID=c(6,7,8,9,10); a=cbind(male_ID, female_ID)

#create graph object from dataframe
g <- igraph::graph_from_data_frame(a)

#investigate structure g
igraph::V(g)
#[1] 1  2  3  4  5  6  7  8  9  10

# create sex group vector
sex <- c(replicate(length(male_ID), "Male"), replicate(length(female_ID), "Female"))

#Check group values
print(igraph::V(g)$group)
# NULL

#assign groups
igraph::V(g)$group <- sex

#Check group values again
print(igraph::V(g)$group)
#[1] "Male"   "Male"   "Male"   "Male"   "Male"   "Female" "Female" "Female" "Female" "Female"

# I use visnetwork to visualise 
vis_g <- visNetwork::toVisNetworkData(g, idToLabel = TRUE) 

visNetwork::visNetwork(
  nodes = vis_g$nodes,
  edges = vis_g$edges
  )
  

Комментарии:

1. Спасибо, но в моей полной базе данных более 900 каждого мужчины и женщины. Используя ifelse, мне нужно вручную добавить, какая вершина какая? Есть ли способ, которым я могу сказать, если в col1 = мужской, col2 = женский?

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