【问题标题】:Custom Sorting Order Methods in R?R中的自定义排序顺序方法?
【发布时间】:2014-09-13 01:53:56
【问题描述】:

我有一个 data.frame d,其日期列的格式为 d$date[1]="01-Jan-09" 到 d$date[1825]="31-Dec-13"。当我使用 order 对其进行排序时,

d[order(as.Date(d$date,format="%d%b%y")),] 

它按时间顺序正确排序,但是我希望它忽略年份对其进行排序。

我想要“01-Jan-09”、“01-Jan-10”、“01-Jan-11”、...、“31-Dec-11”的输出, “2012 年 12 月 31 日”,最后是“2013 年 12 月 31 日”。

有没有一种简单的方法可以在不制作自定义函数的情况下实现此顺序?

【问题讨论】:

    标签: r sorting date


    【解决方案1】:

    只需将年份从您的format 规范中删除即可:

    d <- seq.Date(from=as.Date("2009-01-01"),to=as.Date("2013-12-31"),by=1)
    head(d[order(format(d,"%m%d"))])
    [1] "2009-01-01" "2010-01-01" "2011-01-01" "2012-01-01" "2013-01-01"
    [6] "2009-01-02"
    

    【讨论】:

    • @MichaelBird 不客气。请注意,我已将其编辑为首先使用月份,否则您将获得秒之前的所有月份的第一个月,等等
    【解决方案2】:

    使用format

    dat <- c("31-Dec-12","01-Jan-10", "01-Feb-11", "01-Jan-09" , "31-Dec-11")
    
    dat <- as.Date(dat,format="%d-%b-%y")
    
    dat[order(format(dat, "%y%m%d"))]
    [1] "2009-01-01" "2010-01-01" "2011-02-01" "2011-12-31" "2012-12-31"
    

    【讨论】:

      【解决方案3】:

      您可以使用 lubridate 包来做到这一点。

      library(lubridate)
      days <- seq(ymd("2009-01-01"), ymd("2013-01-01"), by = "1 day")
      days[order(month(days), day(days), year(days))]
      

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-12
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多