Редималық медианы табудың идиоматикалық әдісі

Мен Р-дегі реттік ортаның (яғни тапсырыс беруші фактордың) медианасын табу керек.

Бұл үшін әдеттегі кітапханада әдіс таба алмадым, сондықтан мен төмендегі шешімге келдім:

ordinal.median <- function(x){
        lbls <- levels(x)
        new.vars <- c(NA, 1:length(lbls))
        new.vars[1] <- median(as.numeric(x))
        return(factor(new.vars, labels=lbls, ordered=T)[1])
}

Бұл R-дің идоматтық шешімі қандай еді?

2
quantile (x, 0.5, type = c (1,3)) - x
қосылды автор James, көзі

1 жауаптар

Сіз оны аздап жеңілдете аласыз (және ordered - қарапайым факторлар үшін класс екенін ескеріңіз, сондықтан оны median (o) code> сіздің айнымалыларыңыз):

median.ordered <- function(x)
{
    levs <- levels(x)
    m <- median(as.integer(x))
    if(floor(m) != m)
    {
      warning("Median is between two values; using the first one")
      m <- floor(m)
    }
    ordered(m, labels = levs, levels = seq_along(levs))
}

Қолданылуы:

median(ordered(c("A", "B", "C"))) 
median(ordered(c("A", "B", "A", "B")))
5
қосылды
@csgillespie: Келісілді. Мен ескертуді қосып қойдым.
қосылды автор Richie Cotton, көзі
Орташа ұпайларды «бөліп» жатқанда ескертуді қосуыңыз керек. Мысалы, c («A», «A», «B», «B»)
қосылды автор csgillespie, көзі