从r中的日期提取仅四分之一

时间:2016-08-29 15:21:23

标签: r date

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

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

“2003 Q1”

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

“2003 Q1”

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

&

这会起作用,但根本不优雅。有更美妙的方式吗?

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

4 个答案:

答案 0 :(得分:10)

有一个基本的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中找到。

答案 1 :(得分:9)

我愿意:

# 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 :(得分:5)

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

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

答案 3 :(得分:1)

dint软件包也适用于此:

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

您可以找到有关此软件包here的更多信息。