2013-05-19 72 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' , 謝謝 –

相關問題