【问题标题】:combine upper tri and lower tri matrices into a single data frame将上三和下三矩阵组合成一个数据框
【发布时间】:2016-06-25 18:53:42
【问题描述】:

我希望将 p 值和距离表示为单个矩阵中的下三角和上三角条目。虽然我设法为两者创建了 UT 或 LT 矩阵,但我无法将它们合并到 R 中的单个数据框中。

dist[(upper.tri(dist,diag=FALSE))]=0  #upper tri of distances
pval[(lower.tri(pval,diag=FALSE))]=0  #lower tri of p-values

我尝试了以下行但不起作用

dist[(upper.tri(dist,diag=FALSE))]=pval[(lower.tri(pval,diag=FALSE))]

有什么可能的方法吗?

【问题讨论】:

  • 你想如何合并?请提供 dist 和预期输出的示例。

标签: r matrix dataframe


【解决方案1】:

我确信这可以做得更优雅,但我认为这可以满足您的需求:

a <- matrix(0, nrow = 10, ncol = 10)
b <- matrix(1, nrow = 10, ncol = 10)

a[upper.tri(a)]
b[lower.tri(b)]

new <- matrix(NA, nrow = 10, ncol = 10)
new[upper.tri(new)] <- a[upper.tri(a)]
new[lower.tri(new)] <- b[lower.tri(b)]
new

由于您没有提供可重现的示例,我无法确定,但基本上我只是取矩阵的上下(一个为 0,另一个为 1)并将它们组合到 new 中。作为概念证明,new 在对角线上方有 0,在下方有 1,对角线本身有 NA。希望这能让您对自己的问题有所了解。

【讨论】:

  • 谢谢!这正是我一直在寻找的,但我写的大部分台词都很笨拙。再次感谢!
【解决方案2】:

虽然,这个问题已经回答了我想添加以下代码以供任何人将来使用。

首先,创建两个 10 x 10 的矩阵,只有 1 和 2。然后使用包 Matrix 只得到下三角矩阵和上三角矩阵。由于没有重叠,我们可以简单地使用加法来组合两个矩阵。然后先将“dgeMatrix”转换为矩阵,再转换为数据框。

a <- matrix(1,10,10)
b <- matrix(2,10,10)

library(Matrix)
a <- tril(a, -1) # strict lower triangular matrix (omit diagonals)
b <- triu(b, 1) # strict upper triangular matrix
c <- a + b
c <- as.data.frame(as.matrix(c))

【讨论】:

  • 请加一句你在做什么,帮助OP更好的理解。
  • 谢谢,kabanus,我添加了一些文字。希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多