查找序数中位数的惯用方法

发布于 2024-12-12 03:05:18 字数 378 浏览 0 评论 0原文

我需要在 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])
}

What would be the idiomatic Solution to this在 R 中?

I need to find the median of an ordinal (i.e. ordered factor) in R.

I couldn't find a method in the standard library to do this, so I came up with the following clunky solution:

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])
}

What would be the idiomatic solution to this in R?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

少跟Wǒ拽 2024-12-19 03:05:18

您可以稍微简化一下(请注意,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")))

You can simplify it a bit (and note that ordered is the class for ordinal factors, so you can call this with just median(o) where o is your variable):

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))
}

Usage:

median(ordered(c("A", "B", "C"))) 
median(ordered(c("A", "B", "A", "B")))
迷爱 2024-12-19 03:05:18
quantile(ordered_factor, .5, type=1)

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

quantile(ordered_factor, .5, type=1)

See help page for discussion of the type= option.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文