创建下三角遗传距离矩阵

use*_*713 5 r matrix

我有这样的距离矩阵

      1   2   3   4   5
A   0.1 0.2 0.3 0.5 0.6
B   0.7 0.8 0.9 1   1.1
C   1.2 1.3 1.4 1.5 1.6
D   1.7 1.8 1.9 2   2.1
E   2.2 2.3 2.4 2.5 2.6
Run Code Online (Sandbox Code Playgroud)

现在我想像这样创建下三角矩阵

    1   2   3   4   5   A   B   C   D   E
1   0                                   
2   0.1 0                               
3   0.2 0.1 0                           
4   0.4 0.3 0.2 0                       
5   0.5 0.4 0.3 0.1 0                   
A   0.1 0.2 0.3 0.5 0.6 0               
B   0.7 0.8 0.9 1   1.1 0.6 0           
C   1.2 1.3 1.4 1.5 1.6 1.1 0.5 0       
D   1.7 1.8 1.9 2   2.1 1.6 1   0.5 0   
E   2.2 2.3 2.4 2.5 2.6 2.1 1.5 1   0.5 0
Run Code Online (Sandbox Code Playgroud)

我只是从第一个表中的 1 中减去 2 之间的距离,以获得 1 和 2 之间的遗传距离(0.2 - 0.1 = 0.1),就像我在其余条目中所做的那样,我不知道这样做是否正确?,在做这样的计算之后,制作了下三角矩阵。我在 R 中试过这样

x <- read.csv("AD2.csv", head = FALSE, sep = ",")
b<-lower.tri(b, diag = FALSE)
Run Code Online (Sandbox Code Playgroud)

但我只得到 TRUE 和 FALSE 作为输出,而不是距离矩阵。任何人都可以帮助解决这个问题,这里是我的示例数据的链接。

chi*_*n12 4

您可以使用它dist来计算子矩阵。然后使用cbind并创建上半部和下半部。然后rbind是2半。然后将上三角设置为 NA 以创建所需的输出。

mat <- rbind(
    cbind(as.matrix(dist(tbl[1,])), tbl),
    cbind(tbl, as.matrix(dist(tbl[,1])))
)
mat[upper.tri(mat, diag=FALSE)] <- NA
mat
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。

数据:

tbl <- as.matrix(read.table(text="1   2   3   4   5
A   0.1 0.2 0.3 0.5 0.6
B   0.7 0.8 0.9 1   1.1
C   1.2 1.3 1.4 1.5 1.6
D   1.7 1.8 1.9 2   2.1
E   2.2 2.3 2.4 2.5 2.6", header=TRUE, check.names=FALSE, row.names=1))
Run Code Online (Sandbox Code Playgroud)