2016-08-29 55 views
2

我只想从日期中仅提取季度,例如从日期“2003-02-08”中获得整数1。我一直沿着这条线尝试一些从r中的日期提取仅四分之一的日期

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

“2003 Q1”

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] 
    ... 

这样会起作用,但不是很优雅。有没有更好的方法来做到这一点?

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

回答

7

我会做:

# 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使用整数存储。)

3

lubridate包具有相同的功能。我们也可以使用它。我使用@弗兰克DT

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

有一个基础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