矩阵上的逆对角线

时间:2017-02-03 15:35:30

标签: r matrix

所以我有2 dataframes。他们喜欢这样:

 data1 <- data.frame(c(1.2, 1.4, 1.3),
                     c(1.12,1.1, 1.9),
                     c(1.8, 1.1, 1.32))

 data2 <- data.frame(c(0.4, 0.2, 0.3),
                     c(0.1, 0.1, 0.4),
                     c(0.5, 0.7, 0.4))

如何创建一个如下所示的联合矩阵:

combined.data
> 1.2  1.12  1.80
  1.4 1.10  0.7
  1.3  0.4  0.4

左上角矩阵为data1,右下角为data2。我是

到目前为止,我的代码是这样的,我得到了我想要的东西但是上下来了:

new <- -data1
#new <- new[, rev(colnames(data1))]
# diag(new) <- NA
corel <- data2
#corel <- corel[, rev(colnames(data2))]


new[upper.tri(new)] <-  corel[upper.tri(corel)]

我需要行和列顺序完整

有什么想法吗?

在使用Haboryme的服用之后,我以某种方式获得了结果。我已经制作了热图来展示它。问题是在某些空间中,数据与2个矩阵重叠。

这是热图 enter image description here

在对角线上方,它需要是完全红色,在对角线下方是蓝色。

我接受了Haboryme的回答。问题是我的数据是32 * 31。如果您的矩阵不是正方形,它将变得一团糟! 我刚刚在我的数据集中添加了一个虚拟列,它就像一个魅力!

1 个答案:

答案 0 :(得分:0)

你可以这样做:

data1 <- data.frame(c(1.2, 1.4, 1.3),
                    c(1.12,1.1, 1.9),
                    c(1.8, 1.1, 1.32))

data2 <- data.frame(c(0.4, 0.2, 0.3),
                    c(0.1, 0.1, 0.4),
                    c(0.5, 0.7, 0.4))

combined=as.matrix(data1)
combined[apply(lower.tri( as.matrix(data2)), 1, rev)]  <-as.matrix(data2)[apply(lower.tri( as.matrix(data2)), 1, rev)]

> combined
     c.1.2..1.4..1.3. c.1.12..1.1..1.9. c.1.8..1.1..1.32.
[1,]              1.2              1.12               1.8
[2,]              1.4              1.10               0.7
[3,]              1.3              0.40               0.4