序数の中央値を求める慣用法

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のこれに対する慣用的な解決策は何でしょうか?

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,