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

时间:2017-04-12 11:22:19

标签: r date calendar transform financial

我正在处理一个日期框架(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="")
}     

我找不到任何以前的相关帖子,所以我很感激任何指导。

1 个答案:

答案 0 :(得分:2)

使用动物园中定义的"yearqtr"类,我们可以用两行代码完成。

转换为"yearqtr""yearqtr"类使用内部表示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")

更新:改进了一些代码。