2

我需要在 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 中解决这个问题的惯用方法是什么?

4

2 回答 2

6

您可以稍微简化一下(并注意这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")))
于 2011-10-28T04:30:11.420 回答
1
quantile(ordered_factor, .5, type=1)

type=有关该选项的讨论,请参见帮助页面。

于 2019-12-19T19:26:56.040 回答