矩阵的逆对角线

7

我有两个数据框。可以这样想象它们:

 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的方法后,我成功得到了结果,并生成了一个热力图展示数据。问题是在一些空间中,数据重叠在两个矩阵上。

这是热力图: enter image description here

在对角线以上应该是全红,在对角线以下应该是蓝色。

我已经接受了Haboryme的答案。问题是我的数据是32*31。如果你的矩阵不是正方形,那么它会变得混乱! 我只需向我的数据集添加1个虚拟列即可轻松解决问题!


3
你的代码行发出警告,它们生成的结果很可能与你想要的不同。请花些时间确保我们拥有一个可重现的示例。 - nicola
我并不完全确定您的意图,但首先请将“as.data.frame”更改为“data.frame”。 我有一种感觉,问题可能在于您认为读入数据框中的每个数字向量都是一行,而实际上它是一列,即“c(1.2,1.4,1.3)”生成“data1”的第一列。 - Frost_Maggot
也许他们想要使用 rbind 而不是 as.data.frame... - nicola
@Frost_Maggot 现在检查一下,我已经修复了。 - Mixalis
@nicola 我又运行了一遍,没有出现任何错误...请再次检查期望的输出。我已经将其更改为我想要的样子。 - Mixalis
你的矩阵是否是方阵且维度相等?你可以尝试使用 row(data2) > col(data2)[, ncol(data2):1] 进行子集和赋值。 - alexis_laz
1个回答

1
你可以这样做:

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

我刚试了一下你的方法。它有点有效......问题是在某些点上,一个矩阵与另一个矩阵重叠了。我该如何添加一个热图的图片来展示它的行为? - Mixalis
check now please. - Mixalis
@Mixalis,您能提供导致问题的数据吗? - Haboryme
很遗憾,它与我给你的示例完全相同,只是在两个32*31矩阵中。如果我们用NA替换矩阵的已删除部分会怎样呢? - Mixalis
@Mixalis 32*31?如果它们不是方形的话,这是行不通的。 - Haboryme
让我们在聊天中继续这个讨论 - Mixalis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接