[英]Convert pairwise distance matrix to column format in R
我有一個成對的距離矩陣(4x4)。 如何從此矩陣轉換為具有2行的列格式? 為什么要兩排? 因為我不希望所有的成對比較,所以只有一半在輸出中顯示。 例如,如果我有一個10x10的矩陣,我將進行100次比較,但是我這100個中只有5個與我有關,而這5個將是物種1與物種2,物種3與物種4,物種5與物種6,物種7與物種8,物種9與物種種類10。
輸入:
species1 species2 species3 species4
species1 0 0.093165625 0.228683707 0.194066949
species2 0.093165625 0 0.155611221 0.129896673
species3 0.228683707 0.155611221 0 0.04360685
species4 0.194066949 0.129896673 0.04360685 0
輸出:
species1 species2 0.093165625
species3 species4 0.04360685
不確定為什么您希望轉換后的矩陣只有兩行,但是通常可以使用stack
mat <- as.matrix(read.table(text =
" species1 species2 species3 species4
species1 0 0.093165625 0.228683707 0.194066949
species2 0.093165625 0 0.155611221 0.129896673
species3 0.228683707 0.155611221 0 0.04360685
species4 0.194066949 0.129896673 0.04360685 0", header = T))
stack(mat)[, c(1, 2, 4)]
#DataFrame with 16 rows and 3 columns
# row col NA
# <character> <Rle> <numeric>
#1 species1 species1 0
#2 species2 species1 0.093165625
#3 species3 species1 0.228683707
#4 species4 species1 0.194066949
#5 species1 species2 0.093165625
#... ... ... ...
#12 species4 species3 0.04360685
#13 species1 species4 0.194066949
#14 species2 species4 0.129896673
#15 species3 species4 0.04360685
#16 species4 species4 0
這是一個非常獨特的要求。 您希望所有其他條目都來自一次性對角線。 好。
我最喜歡的將數據從寬格式轉換為長格式的方法是使用reshape2
包中的melt()
。 然后構造提取所需值的序列。
> mat <- as.matrix(read.table(text =
+ " species1 species2 species3 species4
+ species1 0 0.093165625 0.228683707 0.194066949
+ species2 0.093165625 0 0.155611221 0.129896673
+ species3 0.228683707 0.155611221 0 0.04360685
+ species4 0.194066949 0.129896673 0.04360685 0", header = T))
> library(reshape2)
> N <- nrow(mat)
> melt(mat)[seq(from=N+1,to=N^2,by=2*(N+1)),]
Var1 Var2 value
5 species1 species2 0.09316563
15 species3 species4 0.04360685
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.