# [R] calculating mean excluding zeros

Dimitri Liakhovitski dimitri.liakhovitski at gmail.com
Tue Jul 19 23:20:03 CEST 2011

```Thanks a lot, Sarah.
I assume, if the values against which I am comparing are REALLY zero
("0") - then even the first one (mean(testvec[testvec != 0])) should
work, right?
Dimitri

On Tue, Jul 19, 2011 at 4:56 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
> In the more general case, that approach is prone to machine precision
> error (FAQ 7.31).
>
> Here's a clunky but safer alternative:
>
>> set.seed(1234)
>> testvec <- sample(0:10, 100, replace=TRUE)
>> mean(testvec)
> [1] 4.31
>> mean(testvec[testvec != 0])
> [1] 4.842697
>> mean(testvec[!sapply(testvec, function(x)isTRUE(all.equal(x, 0)))])
> [1] 4.842697
>>
>
> (Is there an elementwise equivalent to all.equal() that I'm missing?)
>
> Sarah
> On Tue, Jul 19, 2011 at 4:48 PM, Weidong Gu <anopheles123 at gmail.com> wrote:
>> You can do it by subsetting or indexing
>>
>>  r<-c(0,0,0,rnorm(10,10,5))
>>> mean(r)
>> [1] 8.052215
>>> mean(r[r!=0])
>> [1] 10.46788
>>
>> Weidong Gu
>>
>> On Tue, Jul 19, 2011 at 4:36 PM, Dimitri Liakhovitski
>> <dimitri.liakhovitski at gmail.com> wrote:
>>> Sorry if it's been discussed before - don't seem to find it.
>>> I'd like to calculate a mean while ignoring zeros.
>>> "mean" doesn't seem to have an option for that.
>>> Any other function/package that could do it?
>>>
>>> Thanks for a pointer!
>>>
>>> --
>>> Dimitri Liakhovitski
>>> marketfusionanalytics.com
>>>
>
>
>
> --
> Sarah Goslee
> http://www.functionaldiversity.org
>

--
Dimitri Liakhovitski
marketfusionanalytics.com

```