#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. хорошо, я отредактировал свой ответ. Я просто сделал создание группового вектора немного более общим, что должно сработать, если ваша полная база данных имеет ту же структуру, что и данные вашего примера.