Создать ребро из графа со всеми возможными комбинациями вершин - PullRequest
0 голосов
/ 12 июня 2018

Я хочу преобразовать график в список ребер.Это можно сделать с помощью функции get.edgelist.Проблема заключается в том, что эта функция создает только соединения списка ребер между подключенными узлами.Мне нужен список ребер с всеми потенциальными комбинациями узлов, а не только связанных.Возьмите следующий пример:

set.seed(1234)
g <- sample_gnm(n=20,m=20)
E(g)$weight <- sample(20)
plot(g)

enter image description here

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

cbind(get.edgelist(g,names=TRUE),E(g)$weight)

      [,1] [,2] [,3]
 [1,]    3    5    4
 [2,]    1    7   11
 [3,]    1    8   16
 [4,]    3    9    8
 [5,]    1   10   12
 [6,]    4   10    1
 [7,]    7   12    7
 [8,]    2   13   10
 [9,]    6   13   14
[10,]   11   14    2
[11,]    3   15    3
[12,]   14   15   13
[13,]    2   16    9
[14,]   15   16   17
[15,]    1   17    5
[16,]   11   17   20
[17,]    6   18    6
[18,]    2   19   18
[19,]   14   19   15
[20,]   14   20   19

Этот результат не является удовлетворительным, поскольку он дает мне фактические комбинации узлов, но не все потенциальные комбинации узлов.Например, узлы 4 и 5 не связаны в графе, поэтому не отображаются в одной строке списка ребер.В идеальном мире я получил бы все потенциальные комбинации, включая узлы 4 и 5, с нулевым весом ребра в третьем столбце.Кто-нибудь?

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете попробовать tidyverse, используя complete для непрерывных данных, и заполнить V3 0.Наконец, отфильтруйте «само-края».

library(tidyverse)
cbind(get.edgelist(g,names=TRUE),E(g)$weight) %>% 
  as.tibble() %>% 
  complete(V1=1:20, V2=1:20, fill = list(V3 = 0)) %>% 
  filter(V1 != V2)
# A tibble: 380 x 3
      V1    V2    V3
   <dbl> <dbl> <dbl>
 1     1     2     0
 2     1     3     0
 3     1     4     0
 4     1     5     0
 5     1     6     0
 6     1     7     0
 7     1     8    13
 8     1     9     0
 9     1    10     0
10     1    11     0
# ... with 370 more rows
...