Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的外部联合_R_Matrix_Union - Fatal编程技术网

R中的外部联合

R中的外部联合,r,matrix,union,R,Matrix,Union,我需要在R中的两个表上执行一个并集。但是,该并集需要包含两个父矩阵/表不通用的列 此场景与此处描述的外部联合非常相似: 我有两个矩阵: 矩阵1 Name Var1 Var2 1 1 0 2 1 0 矩阵2 Name Var1 Var3 3 0 1 4 0 1 我需要将其合并到矩阵3中: Name Var1 Var2 Var3 1 1 0 0 2 1 0 0 3 0 0 1 4 0

我需要在R中的两个表上执行一个并集。但是,该并集需要包含两个父矩阵/表不通用的列

此场景与此处描述的外部联合非常相似:

我有两个矩阵:

矩阵1

Name Var1 Var2 
1    1    0 
2    1    0 
矩阵2

Name Var1 Var3
3    0    1
4    0    1
我需要将其合并到矩阵3中:

Name Var1 Var2 Var3
1    1    0    0
2    1    0    0
3    0    0    1
4    0    0    1

我们可以转换为
data.frame
并使用
bind\u rows
。默认情况下,它用
NA

library(dplyr)
library(tidyr)
bind_rows(as.data.frame(m1), as.data.frame(m2)) %>%
    mutate_all(replace_na, 0) %>%
    as.matrix
#      Name Var1 Var2 Var3
#[1,]    1    1    0    0
#[2,]    2    1    0    0
#[3,]    3    0    0    1
#[4,]    4    0    0    1
或者正如@markus所提到的
rbind.fill.matrix
from
plyr
将非常有用

plyr::rbind.fill.matrix(m1, m2)
数据
m1使用
merge

M <- replace(M<-as.matrix(merge(data.frame(M1),data.frame(M2),all = T)),
        which(is.na(M)),
        0)
数据

M1 <- structure(c(1L, 2L, 1L, 1L, 0L, 0L), .Dim = 2:3, .Dimnames = list(
    NULL, c("Name", "Var1", "Var2")))

M2 <- structure(c(3L, 4L, 0L, 0L, 1L, 1L), .Dim = 2:3, .Dimnames = list(
    NULL, c("Name", "Var1", "Var3")))
M1
> M
     Name Var1 Var2 Var3
[1,]    1    1    0    0
[2,]    2    1    0    0
[3,]    3    0    0    1
[4,]    4    0    0    1
M1 <- structure(c(1L, 2L, 1L, 1L, 0L, 0L), .Dim = 2:3, .Dimnames = list(
    NULL, c("Name", "Var1", "Var2")))

M2 <- structure(c(3L, 4L, 0L, 0L, 1L, 1L), .Dim = 2:3, .Dimnames = list(
    NULL, c("Name", "Var1", "Var3")))