0

2 つのデータセットがあるとxyます。

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新しいマトリックスを作成し、適切に入力するだけで、これを行う方法を次に示します。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
于 2013-09-14T01:19:52.203 に答える