Идиоматический метод нахождения медианы порядкового номера

#r #median #r-factor #ordinal

#r #медиана #r-фактор #порядковый

Вопрос:

Мне нужно найти медиану порядкового номера (т.Е. Упорядоченного множителя) в R.

Я не смог найти метод в стандартной библиотеке для этого, поэтому я придумал следующее неуклюжее решение:

 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?

Комментарии:

1. quantile(x,0.5,type=c(1,3)) обрабатывать нечисловые x

Ответ №1:

Вы можете немного упростить его (и обратите внимание, что ordered это класс для порядковых коэффициентов, поэтому вы можете вызвать это только с median(o) помощью where o ваша переменная):

 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")))
 

Комментарии:

1. Вероятно, вам следует добавить предупреждение, когда вам нужно «разделить» среднюю точку. Например, какова медиана c("A", "A", "B", "B")

2. @csgillespie: Согласен. Я добавил предупреждение.

Ответ №2:

 quantile(ordered_factor, .5, type=1)
 

См. Страницу справки для обсуждения type= опции.