我的目标是从两个数据帧中创建一个矩阵。一个数据框包含对角线和较高的三角形值,另一数据框包含较低的三角形值。
> 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)]
但是它将第二个数据帧的行粘贴到第一个数据帧的行下方。 如何根据行和列的名称将两个数据框放在一起?
谢谢!
答案 0 :(得分:1)
您可以将pow
的下三角部分替换为df1
。
df2
测试
df1[lower.tri(df1)] <- df2[lower.tri(df2)]