R:组合两个长度不等的矩阵/向量,根据相同的值匹配行

R:组合两个长度不等的矩阵/向量,根据相同的值匹配行,r,matrix,merge,dplyr,bind,R,Matrix,Merge,Dplyr,Bind,我正在努力合并两个长度不等的矩阵,跨越相同(或类似)的时间框架。我想根据时间维度将两个矩阵的信息合并成一个矩阵,在缺少第二个矩阵信息的行中填充零 在下面的示例中,我有一个5x2和3x1矩阵,其行名等于相应的时间 输入1 [,1] [,2] 20160518 15:31:00 1 1 20160518 15:32:00 2 1 20160518 15:33:00 3 1 20160518 15:34:00 4

我正在努力合并两个长度不等的矩阵,跨越相同(或类似)的时间框架。我想根据时间维度将两个矩阵的信息合并成一个矩阵,在缺少第二个矩阵信息的行中填充零

在下面的示例中,我有一个5x2和3x1矩阵,其行名等于相应的时间

输入1

                   [,1] [,2]
20160518  15:31:00    1    1
20160518  15:32:00    2    1
20160518  15:33:00    3    1
20160518  15:34:00    4    1
20160518  15:35:00    5    1
输入2

                  [,1]                      
20160518  15:31:00 100
20160518  15:34:00 101
20160518  15:35:00 102
期望结果

                   [,1] [,2] [,3]
20160518  15:31:00    1    1  100
20160518  15:32:00    2    1    0
20160518  15:33:00    3    1    0
20160518  15:34:00    4    1  101
20160518  15:35:00    5    1  102
第二个问题将非常类似。现在,我感兴趣的不是根据相同的行名进行匹配,而是根据向量行中相同的值进行匹配。也就是说,假设行名是给定矩阵的一个单独列(因此我有一个5x3和3x2矩阵),我想根据上述相同的逻辑将它们组合成一个

我非常感谢你的帮助。我找了好几个小时才找到解决办法。我尝试了各种merge、cbind和dplyr包命令。我可能漏掉了一点,但我想不出来。最接近的主题是(但我仍然无法针对我的问题进行调整):

最好的,
P.

如果您的行名设置正确、唯一,等等。。。你可以做:

input3 <- input2[rownames (input1),] # reorder input2 as input1  
missing <- is.na (input3[,1])        # find the missing values
input3[missing,1] <- 0               # replace by 1
cbind (input1, input3)               # combine

input3在我看来,您应该使用数据帧而不是矩阵。矩阵用于数字数据,而这里是数字和分类数据的混合体

> x <- cbind(t=rownames(x), as.data.frame(unname(x)))
> y <- cbind(t=rownames(y), as.data.frame(unname(y)))
> xy <- merge(x, y, by='t', all=TRUE)
> xy[is.na(xy)] <- 0
> xy
                   t V1.x V2 V1.y
1 20160518  15:31:00    1  1  100
2 20160518  15:32:00    2  1    0
3 20160518  15:33:00    3  1    0
4 20160518  15:34:00    4  1  101
5 20160518  15:35:00    5  1  102
x <- structure(c(1L, 2L, 3L, 4L, 5L, 1L, 1L, 1L, 1L, 1L),
               .Dim = c(5L, 2L),
               .Dimnames = list(c("20160518  15:31:00",
                                  "20160518  15:32:00",
                                  "20160518  15:33:00",
                                  "20160518  15:34:00",
                                  "20160518  15:35:00"), NULL))

y <- structure(100:102, .Dim = c(3L, 1L),
               .Dimnames = list(c("20160518  15:31:00",
                                  "20160518  15:34:00",
                                  "20160518  15:35:00"), NULL))