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

Combine two data frames with identical column and rows

我的目标是用两个数据框创建一个矩阵。一个数据帧包含对角线和上三角值,另一个数据帧包含下三角值。

> 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)] 

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

谢谢!

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

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

测试

df1 <- data.frame(matrix(1:9, 3, 3)) ; df1[lower.tri(df1)] <- NA
df1

#   X1 X2 X3
# 1  1  4  7
# 2 NA  5  8
# 3 NA NA  9

df2 <- data.frame(matrix(1:9, 3, 3)) ; df2[upper.tri(df1, diag = T)] <- NA
df2

#   X1 X2 X3
# 1 NA NA NA
# 2  2 NA NA
# 3  3  6 NA

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

#   X1 X2 X3
# 1  1  4  7
# 2  2  5  8
# 3  3  6  9