I am trying to create a new raster layer that is made up of the mean values from 7 other raster layers. I get results using overlay function mean:
mean <- overlay(2000, 2001, 2002, 2003, 2004, 2005, fun=mean)
The results I get however are skewed by a large amount 0 values in many of the cells. As the data within the rasters changes each year some cells could have 0 values one year and a value of 56 the following, for example any particular cell may contain the following:
+----------+---------+
| Year | Value |
+----------+---------+
| 2000 | 0 |
| 2001 | 54 |
| 2002 | 78 |
| 2003 | 102 |
| 2004 | 0 |
| 2005 | 0 |
+----------+---------+
So while the mean is:39, I am trying to achieve the mean ignoring the 0 values so the result should be: 78.
I have tried changing the 0 values to NA:
2000[2000 == 0]<-NA
2001[2001 == 0]<-NA
2002[2002 == 0]<-NA
2003[2003 == 0]<-NA
2004[2004 == 0]<-NA
2005[2005 == 0]<-NA
Which works fine, however the bit that I can't get to work is the calculating of the mean as before but with ignoring these NA values. I have tried
mean <- overlay(2000, 2001, 2002, 2003, 2004, 2005, fun=mean, na.rm=TRUE)
but the results this returns are incorrect. So I am just looking for a way to find the mean whilst ignoring zero values or NA values.
Best Answer
I wanted to point out that you can rewrite the
mean
function,mean
, which you can write yourself to do anything you want, including ditch the 0 values and calculate the mean. For example, if you want to ignore 0s:Then you can pass the function,
meanIgnoringZeroes
to overlay:You can make the function anonymous as well: