2013-05-19 37 views
2

如果我有以下数据:比较下半部上半部分矩阵

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等使用减法瞎搞,但这并没有帮助。

回答

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" 
+2

尼斯:主题,当然,关于在数字结果中使用“==”通常的注意事项。如果这是应用于'double'而不是'integer'结果,我会建议这是第一步:'sign(zapsmall(mat1 -t(mat1)))' –

+0

@dwin,我刚刚在那里了解到'zapsmall' , 谢谢 –

相关问题