From cgenolin at u-paris10.fr  Sat Jun 13 13:03:21 2009
From: cgenolin at u-paris10.fr (Christophe Genolini)
Date: Sat, 13 Jun 2009 13:03:21 +0200
Subject: [Rd] "median" accepting ordered factor
Message-ID: <4A338779.4020506@u-paris10.fr>

Hi the list,
The function median start by exclude the factor. Indeed, it not possible 
to calculate the median for a factor, but it is possible to evaluate the 
median for an ordered factor.
Would it be possible to change the median function to accept also 
ordered factor? This would be helpful specially in social science...
Christophe


median <- function(x, na.rm=FALSE) UseMethod("median")

median.default <- function(x, na.rm = FALSE)
{
    if(is.factor(x) & !is.ordered(x)) stop("need numeric or ordered data")
    ## all other objects only need sort() & sum() to be working
    if(length(names(x))) names(x) <- NULL # for e.g., c(x = NA_real_)
    if(na.rm) x <- x[!is.na(x)] else if(any(is.na(x))) return(x[FALSE][NA])
    n <- length(x)
    if (n == 0L) return(x[FALSE][NA])
    half <- (n + 1L) %/% 2L
    if(n %% 2L == 1L | is.ordered(x)) sort(x, partial = half)[half]
    else sum(sort(x, partial = half + 0L:1L)[half + 0L:1L])/2
}

a1 <- factor(letters[c(1,2,3,2,3,1,3,5,4,3,4,1,1,1,1,1)],ordered=TRUE)
a2 <- factor(letters[c(1,2,3,2,3,1,3,5,4,3,4,1,1,1,1,1,1)],ordered=TRUE)
median(a1)
median(a2)



[Rd] "median" accepting ordered factor
Christophe Genolini