[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