#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=
опции.