我希望将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))]
任何可行的方法吗?
答案 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。希望这能让您对自己的问题有所了解。