R中的邻接矩阵用于两种不同的情况

时间:2016-09-24 19:01:28

标签: r reshape adjacency-matrix

我有一个配方成分RxI矩阵,如下所示:

     I
R    a  b  c  d  e
1    1  0  1  0  0
2    1  1  1  0  1
3    0  1  1  1  0
4    0  0  0  1  1

现在,我想计算RxR邻接矩阵。我对如何计算邻接矩阵的元素几乎没有选择。 选项: 一个。如果它共享任何成分,矩阵中的元素是一个 湾矩阵中的元素是共享成分的数量。

例如,

如果是:

    R
R   1  2  3  4
1   1  1  1  0
2   1  1  1  1
3   1  1  1  1
4   0  1  1  1

如果是b:

    R
R   1  2  3  4
1   2  2  1  0
2   2  4  2  1
3   1  2  3  1
4   0  1  1  2

1 个答案:

答案 0 :(得分:1)

您可以使用tcrossprod()mat %*% t(mat)

tcrossprod(mat)
#     [,1] [,2] [,3] [,4]
#[1,]    2    2    1    0
#[2,]    2    4    2    1
#[3,]    1    2    3    1
#[4,]    0    1    1    2

对于案例a,这是案例b的一个特例,您可以用1替换非零元素:

tm <- tcrossprod(mat)
tm[tm != 0] = 1
tm
#     [,1] [,2] [,3] [,4]
#[1,]    1    1    1    0
#[2,]    1    1    1    1
#[3,]    1    1    1    1
#[4,]    0    1    1    1

数据

dput(mat)
structure(c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 1L, 0L, 1L), .Dim = 4:5, .Dimnames = list(NULL, 
    c("a", "b", "c", "d", "e")))