来自已计算数据的R距离矩阵格式

时间:2012-10-11 21:15:26

标签: r phylogeny

这是我第一次与R.合作。

我有一个有3列和12090行(156个细菌)的表。前两列是细菌的名称,最后一列是表示生物之间相关性的数字(基于一种基因组相似性)。例子是(编号):

bacteria1    bacteria2    0.25846
bacteria1    bacteria3    0.35986
bacteria2    bacteria1    0.57896
bacteria2    bacteria3    0.54596
bacteria3    bacteria1    0.23659
bacteria3    bacteria2    0.36528

我希望能够将邻居加入到各种各样的系统发育树中。我看到了' nj'需要一个距离矩阵才能做到这一点。如何将其转换为距离矩阵或可用格式? (数字已经是距离所以不应该做任何数学运算) 我尝试过as.dist()和as.matrix()和reshape(),但是新的我可能做错了什么。 (重塑可能是我需要的......)

或者,如果有人知道如何通过其他方式将这些变成一棵树。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用库reshape2(与基础R中的重塑功能不同,我认为很多

# Load the library (after installing it, of course)
library(reshape2)

# Load up your data - for future reference, it's always helpful to post your data
# with a question.  I used dput(x) to generate this structure below:
x <- structure(list(V1 = structure(c(1L, 1L, 2L, 2L, 3L, 3L), 
     .Label = c("bacteria1", "bacteria2", "bacteria3"),
     class = "factor"), V2 = structure(c(2L, 3L, 1L, 3L, 1L, 2L),
     .Label = c("bacteria1", "bacteria2", "bacteria3"), class = "factor"),
     V3 = c(0.25846, 0.35986, 0.57896, 0.54596, 0.23659, 0.36528)),
     .Names = c("V1", "V2", "V3"), class = "data.frame",
     row.names = c(NA, -6L))

# Recast it - acast returns a matrix with V1 as the records, V2 as the columns,
# and V3 as the values
distmat <- acast(x, V1 ~ V2, value.var = "V3")

答案 1 :(得分:2)

听起来你有距离矩阵的上三角或下三角部分,但没有尺寸。 (虽然你确定你有156行吗?如果有18种细菌,那么应该有choose(18,2) = 153个条目,而不是156个。)

假设你的表中确实有153行,你可以这样填写矩阵:

m <- matrix(nrow=18, ncol=18)
m[row(m) < col(m)] <- x         # if it's the upper triangular portion

m[row(m) > col(m)] <- x         # if it's the lower triangular portion

然后diag(m) <- 0为对角线。