fma*_*ark 2 r median ordinal r-factor
我需要在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])
}
Run Code Online (Sandbox Code Playgroud)
R中的惯用解决方案是什么?
你可以稍微简化它(并注意这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))
}
Run Code Online (Sandbox Code Playgroud)
用法:
median(ordered(c("A", "B", "C")))
median(ordered(c("A", "B", "A", "B")))
Run Code Online (Sandbox Code Playgroud)