TheRimalaya
TheRimalaya

Reputation: 4592

Combine matrix of same dimension

I have two matrix of same dimension filled with NA and strings. For example,

structure(c("Y1", "Y1", "Y1", NA, NA, NA, NA, NA, NA, NA, NA, 
NA, "Y1", "Y1", "Y1", "Y2", NA, "Y2", NA, NA, NA, NA, NA, NA, 
"Y1", "Y1", "Y1", "Y2", NA, "Y2", NA, NA, NA, NA, NA, NA, NA, 
NA, NA, "Y2", NA, "Y2", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Y2", NA, "Y2", NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(12L, 
12L))

and

structure(c("Y1", "Y1", "Y1", NA, NA, NA, NA, NA, NA, NA, NA, 
NA, "Y1", "Y1", "Y1", NA, NA, NA, NA, NA, NA, NA, NA, NA, "Y1", 
"Y1", "Y1", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Y2", "Y2", 
"Y2", NA, "Y2", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Y2", "Y2", "Y2", NA, "Y2", NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Dim = c(12L, 
12L))

I want to combine these two matrix. The resultant matrix will have same dimension as them and the elements should be as below:

 [,1]   [,2]   [,3]   [,4]   [,5] [,6]   [,7] [,8] [,9] [,10] [,11] [,12]
 [1,] "Y1"   "Y1"   "Y1"   ""     ""   ""     ""   ""   ""   ""    ""    ""   
 [2,] "Y1"   "Y1"   "Y1"   "Y2"   ""   "Y2"   ""   ""   ""   ""    ""    ""   
 [3,] "Y1"   "Y1"   "Y1"   "Y2"   ""   "Y2"   ""   ""   ""   ""    ""    ""   
 [4,] ""     "Y2"   "Y2"   "Y2"   ""   "Y2"   ""   ""   ""   ""    ""    ""   
 [5,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
 [6,] ""     "Y2"   "Y2"   "Y2"   ""   "Y2"   ""   ""   ""   ""    ""    ""   
 [7,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
 [8,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
 [9,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
[10,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
[11,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   
[12,] ""     ""     ""     ""     ""   ""     ""   ""   ""   ""    ""    ""   

Upvotes: 0

Views: 48

Answers (1)

lmo
lmo

Reputation: 38520

For matrices named mat1 and mat2, use logical indexing. In particular, use

mat1[is.na(mat1)] <- mat2[is.na(mat1)]

this returns

mat1
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
 [1,] "Y1" "Y1" "Y1" NA   NA   NA   NA   NA   NA   NA    NA    NA   
 [2,] "Y1" "Y1" "Y1" "Y2" NA   "Y2" NA   NA   NA   NA    NA    NA   
 [3,] "Y1" "Y1" "Y1" "Y2" NA   "Y2" NA   NA   NA   NA    NA    NA   
 [4,] NA   "Y2" "Y2" "Y2" NA   "Y2" NA   NA   NA   NA    NA    NA   
 [5,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
 [6,] NA   "Y2" "Y2" "Y2" NA   "Y2" NA   NA   NA   NA    NA    NA   
 [7,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
 [8,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
 [9,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
[10,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
[11,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA   
[12,] NA   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA

Upvotes: 5

Related Questions