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

如何用R将非方矩阵转换成方矩阵?,r,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 我想让它看起来像这样: A B C D E A

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

我的数据如下所示:

  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
我想让它看起来像这样:

  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

因为我的数据非常庞大,所以我不能用手来做。是否有任何语法可以自动执行此操作?

一个选项是基于唯一的列名和列名(假设它是对称的)创建一个
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

un1谢谢你的语法。它似乎适用于您的示例,但我的数据中的列和行(第一列和第一行)的名称是数字,所以它不适用于我的数据集(排序似乎很奇怪)。结果表明,原始数据集中的值不会进入新矩阵。你还有其他建议吗?我不知怎么做了一个列和行名称相同的矩阵。但是如果我运行'm2[row.names(m1),colnames(m1)]@Jun yeobKim,而没有显示错误的小的可复制示例(使用dput),则很难知道问题。