【发布时间】:2026-01-23 04:00:01
【问题描述】:
我想知道是否有一种通用方法可以对R 中的对称矩阵进行排序,同时保留对角线值。
例如,如果我有这样的矩阵:
# Create Matrix -----------------------------------------------------------
offdiag <- c(rep(1:6))
m <- matrix(NA, ncol = 4, nrow = 4,dimnames = list(c("A","B","C","D"), c("A","B","C","D")))
m[lower.tri(m)] <- offdiag
m[upper.tri(m)] <- t(m)[upper.tri(t(m))]
diag(m) <- 0
m
产生这个:
A B C D
A 0 1 2 3
B 1 0 4 5
C 2 4 0 6
D 3 5 6 0
在上面的示例中,值 C 和 D 共享最大值。所以我想要实现的是重新排序矩阵,使最大值位于上三角形的左上角(同时不改变对角线 0)。
因此,如果我要手动重新排列矩阵,最终结果将是:
# Create sorted matrix by hand --------------------------------------------
A <- c(2,3,0,1)
B <- c(4,5,1,0)
C <- c(0,6,2,4)
D <- c(6,0,3,5)
matr <- cbind(C,D,A,B)
rownames(matr) <- c("C","D","A","B")
matr
会产生:
C D A B
C 0 6 2 4
D 6 0 3 5
A 2 3 0 1
B 4 5 1 0
我想知道的是,有没有办法像我的示例中的 (n X n) 矩阵一样对矩阵进行一般排序?
【问题讨论】: