R 比较上半部分矩阵和下半部分矩阵

R 比较上半部分矩阵和下半部分矩阵,r,matrix,R,Matrix,如果我有以下数据: mat1 <- matrix( c(0,2,3,1,0,1,1,1,1), nrow=3 ) rownames(mat1) <- LETTERS[1:3] colnames(mat1) <- LETTERS[1:3] mat1 # A B C #A 0 1 1 #B 2 0 1 #C 3 1 1 我一直在用减法处理upper.tri等,但这没有帮助。比较每个元素mat1[I,j] 对应的元素位于对角线的另一侧mat1[j,i], 您

如果我有以下数据:

mat1           <- matrix( c(0,2,3,1,0,1,1,1,1), nrow=3 )
rownames(mat1) <- LETTERS[1:3]
colnames(mat1) <- LETTERS[1:3]

mat1
#  A B C
#A 0 1 1
#B 2 0 1
#C 3 1 1

我一直在用减法处理
upper.tri
等,但这没有帮助。

比较每个元素
mat1[I,j]
对应的元素位于对角线的另一侧
mat1[j,i]
, 您可以使用转置
t

r <- sign( mat1 - t(mat1) )
r
#   A  B  C
# A 0 -1 -1
# B 1  0  0
# C 1  0  0

paste( 
  colnames(r)[col(r)], 
  ifelse(r>0, ">", ifelse(r<0, "<", "=")), 
  rownames(r)[row(r)] 
)
# [1] "A = A" "A > B" "A > C" "B < A" "B = B" "B = C" "C < A" "C = B" "C = C"

r0,“>”,ifelse(rNice:Subject,当然,关于在数值结果中使用“==”的常见警告。如果这是应用于
double
而不是
integer
结果:
符号(zapsmall(mat1-t(mat1)),我建议将其作为第一步)
r <- sign( mat1 - t(mat1) )
r
#   A  B  C
# A 0 -1 -1
# B 1  0  0
# C 1  0  0

paste( 
  colnames(r)[col(r)], 
  ifelse(r>0, ">", ifelse(r<0, "<", "=")), 
  rownames(r)[row(r)] 
)
# [1] "A = A" "A > B" "A > C" "B < A" "B = B" "B = C" "C < A" "C = B" "C = C"