Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reshape a matrix to get a network

I need to reshape a two column matrix into a matrix that is similar to an adjacency matrix. I have the following dataset:

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

and so on... for 4000 different firm_id.

In the first column, there is a direct link between firm_id_1 and firm_id_2. For instance, firm_id = 1 is directly linked (first degree) to firm_id 2, 4, 5, indirectly linked (to a second degree) to 3 via firm_id=2, and indirectly linked to a third degree to firm_id=6 via firm_id=3, and so on...

I would like to build this matrix in 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   

Each number represents the degree of separation in the network. Is this doable in R?

like image 715
Plug4 Avatar asked Jan 10 '14 01:01

Plug4


1 Answers

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
like image 118
flodel Avatar answered Sep 21 '22 04:09

flodel