将日历季度转变为财务季度
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")
.
更新: 小的代码改进。
我正在使用一个日期框 (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")
.
更新: 小的代码改进。