【问题标题】:Create lower triangle genetic distance matrix创建下三角遗传距离矩阵
【发布时间】:2018-01-30 08:53:32
【问题描述】:

我有这样的距离矩阵

      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

我只是从第一个表中的 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)

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

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    您可以使用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))
    

    【讨论】:

    • 亲爱的 Chinsoon 非常感谢您的帮助,它运行良好,但我不确定我是否正确,例如 1 和 2、1 和 3、2 和 3 之间的距离和很快。您的任何解决方案都运行良好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多