我认为这是一种更好的方法,应该推广到更大的集合,尽管没有直接测试很难说。我不确定您的 X1 和 X2 变量是什么,但这应该可以工作。你的合并结果的行数应该等于这里m2(较小的矩阵)的行数。
我将您的第一行更改为library(reshape2),它与您的其余代码一起生成这两个对象:
> m1
Var1 Var2 value
1 A1 A1 0.50120206
2 A2 A1 0.07627305
3 A3 A1 0.73757589
4 A4 A1 0.24007736
5 A1 A2 0.93485899
6 A2 A2 0.67076761
7 A3 A2 0.92666447
8 A4 A2 0.79405152
9 A1 A3 0.33120170
10 A2 A3 0.48999764
11 A3 A3 0.86967692
12 A4 A3 0.01966199
13 A1 A4 0.03986184
14 A2 A4 0.50578328
15 A3 A4 0.30689141
16 A4 A4 0.54859405
> m2
Var1 Var2 value
1 A1 A1 0.56995004
2 A2 A1 0.81317914
3 A3 A1 0.51047761
4 A1 A2 0.16949663
5 A2 A2 0.21790332
6 A3 A2 0.75785648
7 A1 A3 0.75591111
8 A2 A3 0.92541073
9 A3 A3 0.07877851
要合并这些,请使用 dplyr 包中的连接操作,例如
> final <- dplyr::full_join(m1, m2, by=c("Var1","Var2"))
Warning messages:
1: In outer_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector
2: In outer_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector
> final
Var1 Var2 value.x value.y
1 A1 A1 0.50120206 0.56995004
2 A2 A1 0.07627305 0.81317914
3 A3 A1 0.73757589 0.51047761
4 A4 A1 0.24007736 NA
5 A1 A2 0.93485899 0.16949663
6 A2 A2 0.67076761 0.21790332
7 A3 A2 0.92666447 0.75785648
8 A4 A2 0.79405152 NA
9 A1 A3 0.33120170 0.75591111
10 A2 A3 0.48999764 0.92541073
11 A3 A3 0.86967692 0.07877851
12 A4 A3 0.01966199 NA
13 A1 A4 0.03986184 NA
14 A2 A4 0.50578328 NA
15 A3 A4 0.30689141 NA
16 A4 A4 0.54859405 NA
(不要担心这里的警告。)
较小对象m2 中的行、列标签对始终是唯一的,如果您只需要较小矩阵中的项目,则可以使用right_join(),例如:
> dplyr::right_join(m1, m2, by=c("Var1","Var2"))
Var1 Var2 value.x value.y
1 A1 A1 0.50120206 0.56995004
2 A2 A1 0.07627305 0.81317914
3 A3 A1 0.73757589 0.51047761
4 A1 A2 0.93485899 0.16949663
5 A2 A2 0.67076761 0.21790332
6 A3 A2 0.92666447 0.75785648
7 A1 A3 0.33120170 0.75591111
8 A2 A3 0.48999764 0.92541073
9 A3 A3 0.86967692 0.07877851
Warning messages:
1: In right_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector
2: In right_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector