将上三和下三三元组合成一个数据帧

时间:2016-06-25 18:53:42

标签: r matrix dataframe

我希望将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))]

任何可行的方法吗?

2 个答案:

答案 0 :(得分:1)

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

首先,创建两个矩阵,每个矩阵分别为10 x 10和1s和2s。然后,使用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))

答案 1 :(得分:0)

我确信这可以更优雅地完成,但我认为这可以做到你想要的:

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,在下方有1s,在对角线上有NA。希望这能让您对自己的问题有所了解。