R DataFrame成方形(对称)矩阵

时间:2015-03-30 14:01:05

标签: r matrix

我搜索了相关问题以便找到答案,但还是没有找到解决方案。

所以这是我的示例矩阵:

input <- structure(c(1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), .Dim = c(3L, 
5L), .Dimnames = list(c("X", "Y", "Z"), c("A", "B", "C", "D", 
"E")))

我想根据输入矩阵的行将此矩阵转换为方阵。所以我想要的输出应该是这样的:

output <- structure(c(1, 2, 0, 2, 1, 0, 0, 0, 1), .Dim = c(3L, 3L), .Dimnames = list(c("X", "Y", "Z"), c("X", "Y", "Z")))

当然,对角线的值为1。

最重要的是:输出矩阵中的i,j(如果i!= j)的值应该对应于输入矩阵内相同列中的非零值的数量。

因此,X和Y的值应该取值2,因为在相同的A和B列中,X和Y的值都大于0。

感谢您的努力。提前谢谢!

1 个答案:

答案 0 :(得分:3)

只需对矩阵及其转置进行矩阵乘法,然后将diag设置为1:

output <- input %*% t(input)
diag(output) <- 1

> output
  X Y Z
X 1 2 0
Y 2 1 0
Z 0 0 1