如果我有以下数据:
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
如何到达data.frame
我知道哪些rowise矩阵条目大于列条目?例如。我希望结果mat1
是某种data.frame
表示:
A < B
A < C
B > A
B = C
C > A
C = B
我一直在使用减法来处理upper.tri
等,但这没有帮助。
答案 0 :(得分: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"