我有兩個對稱的相關矩陣,其中一個代表另一個矩陣的子集。我想將兩個矩陣合併爲長格式,以便稍後將其用於x,y圖。這是一個小例子。合併兩個不同大小的矩陣
library(reshape)
library(ggplot2)
dist1 <- matrix(runif(16),4,4)
dist2 <- matrix(runif(9),3,3)
rownames(dist1) <- colnames(dist1) <- paste0("A",1:4)
rownames(dist2) <- colnames(dist2) <- paste0("A",1:3)
m1 <- melt(dist1)
m2 <- melt(dist2)
final <- merge(m1,m2, by=c("X1","X2"))
ggplot(final, aes(value.x,value.y)) + geom_point()
這很好。 final
包含儘可能多的x1,x2對,如在較小矩陣m2
中發現的那樣。 然而,在我的現實生活中的例子,事情看起來是不同的:
dim(m1) # the large matrix
[1] 14845516 3
dim(m2) # the small matrix
[1] 574564 3
dim(final) # the merged product
[1] 286894 4
真有點奇怪,final
的對代表m2
比對的一半略多(不同的是相當接近,但不等於m2
)中的對角線單元的數量),所以也許merge()
確實只找到一個三角形。但是我現在的假設是m2不是m1的子集(儘管它應該是)。所以,我的問題是:
如何檢查m2 [,1:2]中的所有對是否也出現在m1 [,1:2]中?
有沒有更好的選擇來創建一個合併數據框從m1和m2包含每個X1,X2對包含在兩個矩陣?最佳地,只有唯一的對,例如從A1,A2和A2,A1中,只有一對被選中。
謝謝。
我使用'melt'使用原始代碼得到相同的結果。唯一的區別在於'Var1'和'Var2'中的級別排序不同。所以我在這裏看到使用** dplyr **沒有真正的優勢。 –