R:组合两个长度不等的矩阵/向量,根据相同的值匹配行
我正在努力合并两个长度不等的矩阵,跨越相同(或类似)的时间框架。我想根据时间维度将两个矩阵的信息合并成一个矩阵,在缺少第二个矩阵信息的行中填充零 在下面的示例中,我有一个5x2和3x1矩阵,其行名等于相应的时间 输入1R:组合两个长度不等的矩阵/向量,根据相同的值匹配行,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
[,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))