Dear List I have two large matrices A and B. Both have the same dimensions, let's say 20k x 30k. About half the cells of B are missing. Now I'm looking for an efficient way to merge them, so that the missing values in B are replaced by the corresponding values of A. Matrix A [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 merged with Matrix B [,1] [,2] [,3] [1,] 10 NA NA [2,] NA 50 60 equals [,1] [,2] [,3] [1,] 10 2 3 [2,] 4 50 60 One way to do this, is of course looping through all the cells, checking for NAs and then replacing them with the corresponding values. But this is way too slow for my application. There must be a more efficient way. Does R provide any functions for this? Cheers Stefan
On 6/2/05, Stefan Mischke <mischke at sozpsy.unizh.ch> wrote:> Dear List > > I have two large matrices A and B. Both have the same dimensions, let's > say 20k x 30k. About half the cells of B are missing. Now I'm looking > for an efficient way to merge them, so that the missing values in B are > replaced by the corresponding values of A.How about: B[is.na(B)] <- A[is.na(B)] Sarah -- Sarah Goslee http://www.stringpage.com
On 6/2/2005 4:19 PM, Stefan Mischke wrote:> Dear List > > I have two large matrices A and B. Both have the same dimensions, let's > say 20k x 30k. About half the cells of B are missing. Now I'm looking > for an efficient way to merge them, so that the missing values in B are > replaced by the corresponding values of A. > > Matrix A > [,1] [,2] [,3] > [1,] 1 2 3 > [2,] 4 5 6 > > merged with Matrix B > > [,1] [,2] [,3] > [1,] 10 NA NA > [2,] NA 50 60 > > equals > > [,1] [,2] [,3] > [1,] 10 2 3 > [2,] 4 50 60 > > One way to do this, is of course looping through all the cells, > checking for NAs and then replacing them with the corresponding values. > But this is way too slow for my application. There must be a more > efficient way. > Does R provide any functions for this?As long as the dimensions are the same: replace <- is.na(B) B[replace] <- A[replace] should work. Duncan Murdoch