将日历季度转变为财务季度

Transforming Calendar Quarter to Financial Quarter

我正在使用一个日期框 (INPUT),其中包含每个日历季度的产品交易次数。第一列 (DATE) 包含格式为“2016 Q2”的日历季度。我想将此日期转换为财务季度格式,例如“2016/17 Q1”。财政年度从 4 月 1 日开始。

我想出了下面的代码来完成这项工作,但我想知道是否有我可以使用的公式或更简洁的代码。

INPUT$FY_Date=character(nrow(INPUT))

for (i in 1:nrow(INPUT)) {
    INPUT$FY_Date[i]= if(substr(INPUT$DATE[i],7,7)==1)  paste(as.numeric(substr(INPUT$DATE[i],1,4))-1,"/",substr(INPUT$DATE[i],3,4)," Q4",sep="") else 

    paste(substr(INPUT$DATE[i],1,4),"/",  formatC(as.numeric(substr(INPUT$DATE[i],3,4))+1,width=2,format="d",flag=0)," Q",as.numeric(substr(INPUT$DATE[i],7,7))-1,sep="")
}     

我找不到任何以前的相关帖子,因此非常感谢任何指导。

使用zoo中定义的"yearqtr" class我们可以用两行代码完成。

转换为 "yearqtr""yearqtr" class 使用 year + (qtr-1)/4 的内部表示,其中 qtr 是 1、2、3 或 4,因此添加 3/4 会将其转移到年末年份,并且财政季度。然后在代码的最后一行 as.integer 将提取年终年份。 format 函数可用于获取其余部分,其中 %y 表示 2 位数年份,%q 表示季度。

library(zoo)

# test input
yq <- c("2016 Q2", "2016 Q3", "2016 Q4", "2017 Q1")

fyq <- as.yearqtr(yq, format = "%Y Q%q") + 3/4
paste0(as.integer(fyq) - 1, format(fyq, "/%y Q%q"))

给予:

[1] "2016/17 Q1" "2016/17 Q2" "2016/17 Q3" "2016/17 Q4"

请注意,如果您不需要问题中显示的特定格式,您可以使用 format(fyq) 代替最后一行或者 format(fyq, "%Y Q%q").

更新: 小的代码改进。