【问题标题】:Sorting months in R在 R 中对月份进行排序
【发布时间】:2012-03-19 11:49:19
【问题描述】:

我想对月份名称进行排序。当我使用 strptime 函数时,它会返回错误,因为属性值仅包含月份名称。当我使用sort 函数时,月份按字母顺序排序。

【问题讨论】:

    标签: r date


    【解决方案1】:

    您始终可以将数据转换为因子。例如,假设我们有

    x = c("January", "February", "March", "January")  
    

    然后转换为一个因子,我们有:

    x_fac = factor(x, levels = month.name)
    

    排序后给出:

    R> sort(x_fac)
    [1] January  January  February March   
    12 Levels: January February March April May June July August ... December
    

    【讨论】:

    • 常量 month.namemonth.abb 在这方面很有用,因此您无需输入月份名称等。不过,仅对英文月份名称和缩写有用。
    • 另外,请注意“Feburary”——您不太可能(我希望)在真实数据中找到它。也许这是@GavinSimpson 提出建议的部分原因
    • 谢谢@GavinSimpson 我不知道month.name
    【解决方案2】:

    这是粗略的,但如果你想创建一个按月对行进行排序或排序的函数,这将起作用:

    sort.month <- function(x, dataframe = NULL){
        y <- data.frame(m1 = month.name, m2 = month.abb, n = 1:12)
        z <- if(max(nchar(x)) == 3) match(x, y[, 'm2']) else match(x, y[, 'm1'])
        x <- if(is.null(dataframe)) x else dataframe
        h <- data.frame(z, x)
        h[order(z), ][, -1]
    }
    
    #examples
    x <- sample(month.name, 20, r=T)
    a<-data.frame(y= x, k =1:20, w=letters[1:20])
    sort.month(a$y, a)
    sort.month(a$y)
    

    【讨论】:

    • 我在我创建的自定义函数中大量使用这种类型的排序 - 所以我更喜欢这种方法而不是 @csgillespie 发布的极简主义或标准方法(即我的投票在这里)。
    • @SilSur 起初我拒绝了您建议的编辑,但在考虑更多之后,您的建议可以安全地在内部假设。我手动编辑了帖子以匹配您建议的编辑,因为一旦我拒绝它就太晚了。
    • ...所以我的编辑没有布朗尼积分?
    • 抱歉 :-( 我是最糟糕的。我获得了批准编辑的新权力,但我第一次搞砸了。权力越大,责任越大。
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2014-04-11
    • 2020-08-19
    • 1970-01-01
    • 2023-03-30
    • 2022-01-04
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多