0

假设您有两个数据集,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
4

2 回答 2

2

您可以使用 plyr.fill

library(plyr)

# With matrices
rbind.fill.matrix(x, y)

# With dataframes
rbind.fill(as.data.frame(x), as.data.frame(y))
于 2013-09-14T00:43:50.850 回答
1

这是一种base方法,只需制作一个新矩阵并适当地填充它。这取决于行是唯一xy

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
于 2013-09-14T01:19:52.203 回答