我正在处理一个日期框架(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="")
}
我找不到任何以前的相关帖子,所以我很感激任何指导。
答案 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")
。
更新:改进了一些代码。