[R] median by geometric mean

Keith Jewell k.jewell at campden.co.uk
Mon Jan 17 18:13:48 CET 2011


Just in case some of x are negative (the desired median still exists, as 
long as the two middle values are non -ve), how about:

x <- runif(20, -1, 100)
exp(median(log(pmax(0,x))))

It'll give -Inf if the two middle values are negative, when I guess we 
should get NaN, but I can't see a 1-line way to handle that!

Keith J

"Peter Ehlers" <ehlers at ucalgary.ca> wrote in message 
news:4D3468EF.5010601 at ucalgary.ca...
> I've been reminded by Prof. Brian Ripley that R's
> log() function will indeed handle zeros appropriately.
>
> Apologies to S Ellison and Hadley Wickham.
>
> Peter Ehlers
>
> On 2011-01-17 06:55, Peter Ehlers wrote:
>> On 2011-01-17 02:19, S Ellison wrote:
>>> Will this do?
>>>
>>> x<- runif(20, 1, 100)
>>>
>>> exp( median( log( x) ) )
>>>
>>> S Ellison
>>>
>>>
>> That's what Hadley proposed, too. It's fine for
>> your example, but there is potentially a small
>> problem with this method: the data must be positive.
>> Since it's not unusual to see data with some zeros,
>> the log() would fail.
>>
>> Depending on what type of data I was going to use
>> this modification of the median for, I would consider
>> modifying the (quite short) median.default function,
>> with appropriate additional data checks.
>>
>> Peter Ehlers
>>
>>>
>>>>>> Skull Crossbones<witch.of.agnessi at gmail.com>   15/01/2011 16:26>>>
>>> Hi All,
>>>
>>> I need to calculate the median for even number of data points.However
>>> instead of calculating
>>> the arithmetic mean of the two middle values,I need to calculate their
>>> geometric mean.
>>>
>>> Though I can code this in R, possibly in a few lines, but wondering if
>>> there
>>> is
>>> already some built in function.
>>>
>>> Can somebody give a hint?
>>>
>>> Thanks in advance
>>>
>



More information about the R-help mailing list