Я пытаюсь сгенерировать список ребер для подачи в igraph
функцию построения графика R, которая требует, чтобы я сгенерировал цель data.frame
', состоящую из двух столбцов, представляющих «от» узла и «до» узла с другими столбцами выступающий в качестве атрибутов ребра.
Так как здесь интерес представляет только неориентированный граф, мне нужно сгенерировать кадр данных из двух столбцов, состоящий из уникальной комбинации любых двух узлов (без порядка) и сгенерировать сумму всех ребер между ними (опять же, неориентированных).
Я ссылался на ряд более ранних потоков, но, похоже, не могу обойти проблему подсчета, потому что большинство кодов рассматривают A -> B и B <- A как разные пары, например: </p>
library(igraph)
# generate 7 edge pairs
ee <- c("A", "B", "B", "A", "C", "A", "C", "D", "D", "E", "A", "E", "A", "C")
# convert to igraph object
g <- graph(ee)
# count edges
edge.count <- function(g){
D <- data.frame(get.edgelist(g)) # convert to data frame
ones <- rep(1, nrow(D)) # a column of 1s
result <- aggregate(ones, by = as.list(D), FUN = sum)
names(result) <- c("from", "to", "count")
result
}
count <- edge.count(g)
count
from to count
1 B A 1
2 C A 1
3 A B 1
4 C D 1
5 A E 1
6 D E 1
7 A C 1
Но мой желаемый вывод должен иметь пару {B, A} с count
из 2 и пару {C, A} с count
из 2, поскольку они рассматриваются как одинаковые с парой {A, B} и {A, C} в неориентированном графе.
Может кто-нибудь порекомендовать какой-нибудь способ решить эту проблему?