如何在R中格式化季度日期? 数据

问题描述

我有一个 df 如下:

df

ID   Date
1    2000/01/12
2    2015/06/11
3    2013/09/10
4    2002/01/07
5    2006/04/05

我想用代码添加代表季度的第三列:

df$quarter <- paste(format(df$Date,"%y"),sprintf("%02i",(as.POSIXlt(df$Date)$mon) %/% 3L + 1L),sep="/")

并收到以下输出

ID   Date          quarter
1    2000/01/12    00/04
2    2015/06/11    15/04
3    2013/09/10    13/04
4    2002/01/07    02/03
5    2006/04/05    06/02

我的问题是如何更改季度列的格式以获得以下输出

ID   Date          quarter
1    2000/01/12    2000q4
2    2015/06/11    2015q4
3    2013/09/10    2013q4
4    2002/01/07    2002q3
5    2006/04/05    2006q2

我不知道如何正确修改我的代码!谢谢!

解决方法

我们可以使用 as.yearqtr 中的 zoo,然后使用 Qq 后面的空格替换为 sub

library(zoo)
df$quarter <- sub("\\s+Q","q",as.yearqtr(df$Date,'%Y/%d/%m'))
df$quarter
#[1] "2000q4" "2015q4" "2013q4" "2002q3" "2006q2"

或者如@G.Grothendieck 在评论中建议的那样

df <- transform(df,Date = format(as.yearqtr(Date,'%Y/%d/%m'),"%Yq%q"))

数据

df <- structure(list(ID = 1:5,Date = c("2000/01/12","2015/06/11","2013/09/10","2002/01/07","2006/04/05")),class = "data.frame",row.names = c(NA,-5L))