Измените матрицу, чтобы получить сеть

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

firm_id_1 firm_id_2
1         2
1         4
1         5
2         1
2         3
3         2
3         6
4         1
4         5
5         4
6         3

и так далее... за 4000 различных firm_id.

в первой колонке есть прямая связь между firm_id_1 и firm_id_2. Например, firm_id = 1 напрямую связан (первая степень) с firm_id 2, 4, 5, косвенно связанные (до второй степени) с 3 через firm_id=2, и косвенно связан с третьей степени firm_id=6 via firm_id=3, и так далее...

Я хотел бы построить эту матрицу в R:

firm_id [1] [2] [3] [4] [5] [6]
[1]          1   2   1   1   3
[2]      1       1           2
[3]          1               1
[4]      1
[5]      1
[6]              1   

каждое число представляет собой степень разделения в сети. Это выполнимо в R?

1 ответов


library(igraph)
g <- graph.edgelist(mat)
shortest.paths(g)

#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    0    1    2    1    1    3
# [2,]    1    0    1    2    2    2
# [3,]    2    1    0    3    3    1
# [4,]    1    2    3    0    1    4
# [5,]    1    2    3    1    0    4
# [6,]    3    2    1    4    4    0