将上半部矩阵与下半部分进行比较

use*_*502 2 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
Run Code Online (Sandbox Code Playgroud)

如何到达data.frame我知道哪些rowise矩阵条目大于列条目?例如,我想要的结果mat1是某种data.frame指示:

A < B 
A < C 
B > A
B = C
C > A
C = B
Run Code Online (Sandbox Code Playgroud)

我一直在upper.tri使用减法搞乱, 但这没有帮助.

Vin*_*ynd 5

要将每个元素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"
Run Code Online (Sandbox Code Playgroud)

  • 尼斯:当然,主题是关于在数字结果中使用"=="的常见警告.我建议将此作为第一步,如果将其应用于`double`而不是`integer`结果:`sign(zapsmall(mat1 -t(mat1))) (2认同)