如何用R?将非方矩阵转换为方阵?

时间:2018-01-27 07:45:56

标签: r

我有一个网络数据并试图分析它。问题是它有一些缺少的行或列。我想匹配行和列,因此它可以是方矩阵

我的数据如下:

  A B C D E
A 0 2 1 4 5 
B 1 0 2 4 2
D 2 4 0 2 2 
E 1 2 2 2 0

我想让它看起来像这样:

  A  B  C  D  E
A 0  2  1  4  5 
B 1  0  2  4  2 
C NA NA NA NA NA 
D 2  4  0  2  2 
E 1  2  2  2  0

由于我的数据非常庞大,所以我不能用手做。它有自动执行的语法吗?

1 个答案:

答案 0 :(得分:1)

一种选择是根据唯一列名和行名创建NA矩阵(假设它是对称的),然后通过匹配原始数据集中的行名和列名填充它

un1 <- unique(sort(c(colnames(m1), rownames(m1))))
m2 <- matrix(NA, length(un1), length(un1), dimnames = list(un1, un1))
m2[row.names(m1), colnames(m1)] <- m1
m2
#   A  B  C  D  E
#A  0  2  1  4  5
#B  1  0  2  4  2
#C NA NA NA NA NA
#D  2  4  0  2  2
#E  1  2  2  2  0

数据

m1 <- structure(c(0L, 1L, 2L, 1L, 2L, 0L, 4L, 2L, 1L, 2L, 0L, 2L, 4L, 
 4L, 2L, 2L, 5L, 2L, 2L, 0L), .Dim = 4:5, .Dimnames = list(c("A", 
 "B", "D", "E"), c("A", "B", "C", "D", "E")))