我有像这样的距离矩阵
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
现在我想像这样创建下三角矩阵
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
我只是从第一张表中扣除了2比1之间的距离,以获得1到2之间的遗传距离(0.2 - 0.1 = 0.1),就像我在其余的条目中所做的那样,我不知道这样做是正确的还是不做?,做了像下三角矩阵那样的计算。我在R
中尝试过这样的x <- read.csv("AD2.csv", head = FALSE, sep = ",")
b<-lower.tri(b, diag = FALSE)
但我得到的只是TRUE和FALSE,因为输出不像距离矩阵。 任何人都可以帮助解决这个问题,这里链接到我的example data。
答案 0 :(得分:3)
您可以使用dist
来计算子矩阵。然后使用cbind
创建上半部分和下半部分。然后rbind
两半。然后将上三角形设置为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
希望它有所帮助。
数据:
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))