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 に答える