From: Christophe Genolini <cgenolin_at_u-paris10.fr>

Date: Sat, 13 Jun 2009 13:03:21 +0200

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sat 13 Jun 2009 - 11:12:59 GMT

Date: Sat, 13 Jun 2009 13:03:21 +0200

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)

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sat 13 Jun 2009 - 11:12:59 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Sat 13 Jun 2009 - 14:35:35 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*