Подсчет ребер в графе по атрибуту узлов, которые они соединяют - PullRequest
0 голосов
/ 28 октября 2019

Извините за расплывчатый вопрос, мне сложно точно указать, что мне нужно. Я надеюсь, что пример прояснит ситуацию.

У меня есть сеть с различными атрибутами узла (например, принадлежность к стране и т. Д.). Меня интересует, сколько узлов из страны подключено к той же или другой стране.

Итак, в примере сети:

require(igraph)

zach <- graph("Zachary") # the Zachary carate club

V(zach)$new_var <- sample(c('tomato', 'gold', 'steelblue'), gorder(zach), replace = TRUE)

plot(zach, vertex.size=10, vertex.label=NA, vertex.color = V(zach)$new_var)

Example network with some attributes

Меня интересует, например, сколько синий узлы подключены к синий , красный и т. д.

1 Ответ

3 голосов
/ 29 октября 2019

Вот один из возможных способов

ends <- as_edgelist(zach)
e1 <- V(zach)[ends[,1]]$new_var
e2 <- V(zach)[ends[,2]]$new_var

Тогда вы можете сделать (с set.seed(15))

table(e1, e2)
#            e2
# e1          gold steelblue tomato
#   gold         3         9     13
#   steelblue    5         4     12
#   tomato       7        10     15

Или если вы хотите считать золото-помидор таким же, как помидор-золотоВы можете сделать

endcolors <- t(apply(cbind(e1, e2), 1, sort))    
table(endcolors[,1], endcolors[,2])
#             gold steelblue tomato
#   gold         3        14     20
#   steelblue    0         4     22
#   tomato       0         0     15
...