将成对距离矩阵转换为R

时间:2018-11-04 20:01:38

标签: r matrix

我有一个成对的距离矩阵(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

2 个答案:

答案 0 :(得分:2)

不确定为什么您希望转换后的矩阵只有两行,但是通常可以使用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

答案 1 :(得分:0)

这是一个非常独特的请求。您希望所有其他条目都来自一次性对角线。好吧。

我最喜欢的将数据从宽格式转换为长格式的方法是使用melt()包中的reshape2。然后构造提取所需值的序列。

> 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