[Rd] "median" accepting ordered factor

Christophe Genolini cgenolin at u-paris10.fr
Sat Jun 13 13:03:21 CEST 2009


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)



More information about the R-devel mailing list