假设您有两个数据集x
和y
:
x=matrix(c(1,2,55,3,2,1,0,NA,NA,3,NA,333,NA,9,NA),5,3)
colnames(x)=c(1133131,12442141,20100063)
rownames(x)=c(1,2,3,4,5)
y=matrix(c(8,1,3,41,131,NA,4141,NA,124,NA,213,NA,128,NA,2,NA,1241,2),3,6)
colnames(y)=c(1133131,2422342,555555,33323242,20100063,23325600009)
rownames(y)=c(6,7,8)
我想合并它们,以便所有列都存在于最终数据集中,并且数据填充在它存在的位置,而NA
则不存在。因此,如果其他数据集中没有一个,我希望该部分的所有值都为NA
。
所以基本上我希望最终输出为:
merged: upc
days 1133131, 12442141, 2422342, 555555, 33323242, 20100063, 23325600009
1 1 1 NA
2 2 0 NA
3 55 NA NA
4 3 NA NA ...etc
5 2 3 NA
6 8 NA 41
7 1 NA 131
8 3 NA NA
答案 0 :(得分:2)
您可以使用plyr.fill
library(plyr)
# With matrices
rbind.fill.matrix(x, y)
# With dataframes
rbind.fill(as.data.frame(x), as.data.frame(y))
答案 1 :(得分:1)
这是一种base
方法,只需制作一个新矩阵并适当地填充它。这取决于x
和y
中的行是唯一的。
cs <- sort(unique(c(colnames(x), colnames(y))))
rs <- c(rownames(x), rownames(y))
xy <- array(NA, dim=c(length(rs), length(cs)), dimnames=list(days=rs, upc=cs))
xy[1:nrow(x), colnames(x)] <- x
xy[nrow(x) + 1:nrow(y), colnames(y)] <- y
xy
## upc
## days 1133131 12442141 20100063 23325600009 2422342 33323242 555555
## 1 1 1 NA NA NA NA NA
## 2 2 0 333 NA NA NA NA
## 3 55 NA NA NA NA NA NA
## 4 3 NA 9 NA NA NA NA
## 5 2 3 NA NA NA NA NA
## 6 8 NA 128 NA 41 NA 4141
## 7 1 NA NA 1241 131 213 NA
## 8 3 NA 2 2 NA NA 124