【问题标题】:R DataFrame into square (symmetric) matrixR DataFrame 转换为方形(对称)矩阵
【发布时间】:2015-03-30 14:01:05
【问题描述】:

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

这是我的示例矩阵:

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,因为 X 和 Y 在同一列 A 和 B 中的值都大于 0。

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

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    只取矩阵及其转置的矩阵乘法,然后设置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
    

    【讨论】:

    • 嗯,这太容易了,我猜 :D。非常感谢您的简单回答。你拯救了我的一天;)
    • @RudiSophieson,或者,'diag&lt;-'(tcrossprod(input), 1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多