【问题标题】:Extract only quarter from a date in r从 r 中的日期中仅提取季度
【发布时间】:2017-01-05 16:36:39
【问题描述】:

我只想从日期中提取季度,例如,从日期“2003-02-08”中获取整数 1。我一直在尝试这方面的东西

library(mondate)
as.yearqtr(dat$DATE)

“2003 年第一季度”

as.character(as.yearqtr(dat$DATE))[1]

“2003 年第一季度”

这并没有给出我想要的结果。当然可以写条件如下

library(data.table)
data$DATE = as.Date(data$DATE, format='%d%b%Y')
data$month=month(data$DATE)
setDT(data)[month==1,  quarter:=1]  
    ...

这可行,但一点也不优雅。有没有更漂亮的方法来做到这一点?

感谢 lmo 和 user2100721!我真希望我能接受所有的答案!

【问题讨论】:

    标签: r date


    【解决方案1】:

    我愿意:

    # example data
    DT = data.table(id = 1:10, d = as.IDate("2003-02-08") + seq(100, by=50, length.out=10))
    
    DT[, qtr := quarter(d)]
    
        id          d qtr
     1:  1 2003-05-19   2
     2:  2 2003-07-08   3
     3:  3 2003-08-27   3
     4:  4 2003-10-16   4
     5:  5 2003-12-05   4
     6:  6 2004-01-24   1
     7:  7 2004-03-14   1
     8:  8 2004-05-03   2
     9:  9 2004-06-22   2
    10: 10 2004-08-11   3
    

    quarter 函数由 data.table 提供,适用于 DateIDate 向量。 (IDate 使用整数存储。)

    【讨论】:

      【解决方案2】:

      lubridate 包具有相同的功能。我们也可以使用它。我正在使用@Frank 的DT

      DT[, qtr := lubridate::quarter(d)]
      

      【讨论】:

        【解决方案3】:

        有一个基本的 R 函数 quarters,它或多或少地完成了你想要的,尽管它前置了“Q”。所以

        quarters(as.Date("2001-05-01"))
        [1] "Q2"
        

        如果去掉“Q”很重要,你可以使用substr

        substr(quarters(as.Date("2001-05-01")), 2, 2)
        [1] "2"
        

        其他与日期相关的基本 R 函数,例如 weekdaysmonths 可以在帮助页面 ?quarters 中找到。

        【讨论】:

          【解决方案4】:

          dint 包也适用于:

          library("dint")
          d=as.Date("2015-01-01")
          get_quarter(d)
          

          你可以在here找到更多关于这个包的信息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-02
            • 1970-01-01
            • 1970-01-01
            • 2013-08-01
            • 2016-05-05
            • 1970-01-01
            相关资源
            最近更新 更多