合并具有相同列和行的两个数据框

时间:2020-08-14 07:53:48

标签: r dataframe matrix merge rbind

我的目标是从两个数据帧中创建一个矩阵。一个数据框包含对角线和较高的三角形值,另一数据框包含较低的三角形值。

> upper.tri.matrix
      obs1   obs2   obs3   obs4    obs5   obs6   obs7   obs8    obs9  obs10  obs11
obs1    NA     NA     NA     NA  0.1621   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>
obs2  <NA> 0.4862     NA     NA      NA   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>
obs3  <NA>   <NA> 0.0407     NA -0.0745   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>
obs4  <NA>   <NA>   <NA> 0.0401      NA   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>
obs5  <NA>   <NA>   <NA>   <NA>  0.5878   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>
obs6  <NA>   <NA>   <NA>   <NA>    <NA> 0.2943 0.0694 0.0696  0.3702 0.0322 0.2950
obs7  <NA>   <NA>   <NA>   <NA>    <NA>   <NA> 0.2005 0.0070  0.1582 0.0239 0.1674
obs8  <NA>   <NA>   <NA>   <NA>    <NA>   <NA>   <NA> 0.0000 -0.0143     NA     NA
obs9  <NA>   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>   <NA>  0.6346 0.1569 0.8911
obs10 <NA>   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>   <NA>    <NA> 0.1729 0.1659
obs11 <NA>   <NA>   <NA>   <NA>    <NA>   <NA>   <NA>   <NA>    <NA>   <NA> 0.5925

并且:

> lower.tri.matrix
         obs1   obs2    obs3   obs4    obs5    obs6   obs7   obs8   obs9  obs10  obs11
obs1       NA   <NA>    <NA>   <NA>    <NA>    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>
obs2       NA 0.4862    <NA>   <NA>    <NA>    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>
obs3       NA     NA  0.0407   <NA>    <NA>    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>
obs4       NA     NA      NA 0.0401    <NA>    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>
obs5   0.1156     NA  0.1017     NA  0.5878    <NA>   <NA>   <NA>   <NA>   <NA>   <NA>
obs6   0.1028     NA  0.3779     NA  0.6275  0.2943   <NA>   <NA>   <NA>   <NA>   <NA>
obs7  -0.2033     NA -0.0596     NA  0.2551  0.2506 0.2005   <NA>   <NA>   <NA>   <NA>
obs8       NA     NA      NA     NA      NA  0.0000 0.0000 0.0000   <NA>   <NA>   <NA>
obs9   0.2446     NA      NA     NA  0.6514  0.4703 0.4141 0.0000 0.6346   <NA>   <NA>
obs10  0.6874     NA    <NA>     NA -0.0001 -0.1161 0.1105     NA 0.1674 0.1729   <NA>
obs11  0.2126   <NA>      NA     NA  0.7030  0.4632 0.4687     NA 0.9763 0.1493 0.5925

我正在使用以下代码:

matrix <- rbind(upper.tri.matrix, lower.tri.matrix[,colnames(upper.tri.matrix)] 

但是它将第二个数据帧的行粘贴到第一个数据帧的行下方。 如何根据行和列的名称将两个数据框放在一起?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将pow的下三角部分替换为df1

df2

测试

df1[lower.tri(df1)] <- df2[lower.tri(df2)]