[R] averaging two matrices whilst ignoring missing values

Rolf Turner r.turner at auckland.ac.nz
Tue Jul 14 05:44:14 CEST 2009


On 14/07/2009, at 1:46 PM, Tish Robertson wrote:

> Hi folks,
>
> I'm trying to do something that seems like it should easy, but it  
> apparently isn't.  I have two large matrices, both containing a  
> number of missing values at different cells. I would like to  
> average these matrices, but the NAs are preventing me. I get a "non- 
> numeric argument to binary operator" error.  That's the first problem.

	This error has nothing to do with NAs.  There's something else wrong  
with
	your data.  ***Look*** at them!!!

> test<-read.csv("test.csv",header=FALSE)
> test2<-read.csv("test2.csv",header=FALSE)
> test_ <- as.matrix(test,na.rm=T)
> test2_ <- as.matrix(test2,na.rm=T)

What on earth do you expect to accomplish by the two foregoing calls?
There is no na.rm argument to as.matrix() and even if there were, what
the hell did you expect to get?  What did you expect the dimension of
the results to be?  If NAs were removed, how could things possibly be
arranged in order that the following would make any sense at all?

> testave<- (test_+test2_)/2
>
> ??

	Indeed.

> So off the bat I'm doing something wrong.

	That's for sure.

	Did you ***look*** at ``test_'' and ``test2_''?

> How would I replace the missing values in one matrix with the  
> corresponding non-missing values in another?  It's acceptable to me  
> if I only have one value representing the average for a particular  
> coordinate.
> Any help would be appreciated!

The simplest thing to do would be

	testave <- apply(cbind(as.vector(test),as.vector(test2)), 
1,mean,na.rm=TRUE)
	testave <- matrix(testave,nrow=nrow(test),ncol=ncol(test))

Slightly sexier:  Install and load the package abind;  then

	testave <- apply(abind(test,test2,along=3),c(1,2),mean,na.rm=TRUE)

Note that mean() ***does*** have an na.rm argument!!!

	cheers,

		Rolf Turner

######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}




More information about the R-help mailing list