Идиоматический метод нахождения медианы ординала - PullRequest
2 голосов
/ 28 октября 2011

Мне нужно найти медиану ординала (то есть упорядоченного фактора) в 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 Ответ

5 голосов
/ 28 октября 2011

Вы можете немного упростить его (и заметьте, что ordered - это класс для порядковых множителей, поэтому вы можете назвать это просто с помощью median(o), где 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")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...