【问题标题】:Order Matrices or Dists by dimnames按暗名排序矩阵或分布
【发布时间】:2015-10-21 21:17:16
【问题描述】:

我正在尝试执行具有遗传距离矩阵和物理距离矩阵的 Mantel 测试。由于这些矩阵是如何生成的,它们的“顺序”相互之间是混乱的。令人惊讶的是,我发现很难按行/列名称(即暗名或维度名称)对这些矩阵进行排序。任何帮助将不胜感激。

下面是一个虚拟样本集:

d1 = matrix(c(0,1,2,1,0,3,2,3,0),nrow=3, ncol=3)
rownames(d1) <- c("A","B","C")
colnames(d1) <- c("A","B","C")

d3 = matrix(c(0,.2,.3,.2,0,.1,.3,.1,0),nrow=3, ncol=3)
rownames(d3) <- c("C","A","B")
colnames(d3) <- c("C", "A","B")

这会创建两个相关的矩阵。让我们假设 d1 包含有关一个物种的不同菌株(例如 A、B、C)彼此分离的距离的信息,而 d3 包含这些相同菌株之间的成对遗传差异。我需要这两个矩阵以相同的顺序执行壁炉测试。

当我尝试使用 order 时,我失去了矩阵:

d3[order(rownames(d3))]
[1] 0.2 0.3 0.0

d3[order(as.data.frame(rownames(d3)))]
[1] 0.2 0.3 0.0

【问题讨论】:

  • 您的意思是d3[order(rownames(d3)), ]?或d3[order(rownames(d3)), order(colnames(d3))] 对行和列进行排序以匹配d1。但是由于它们具有完全相同的名称,因此您也不需要order()。你可以做d3[rownames(d1), colnames(d1)]
  • 重复。之前在SO上问过。 hereherehere
  • 谢谢!抱歉重复 - 我遇到了很多帖子,但似乎无法得到我想要的东西......结果我只是忘记了逗号。

标签: r matrix row col


【解决方案1】:

正如理查德指出的那样,我少了一个逗号。

d3[order(rownames(d3)), order(colnames(d3))]

正是我想要的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多