问题描述
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
,然后使用 Q
将 q
后面的空格替换为 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))