确定 R 中 yearmon 对象的财政年度

Identify fiscal year for yearmon object in R

我有初步的月度签证数据(2017 年 9 月 - 2020 年 11 月),我想将其与官方公布的财政年度数据进行比较。我将月份存储为 yearmon 对象,并希望在新列中标识联邦财政年度(从 10 月开始)。

我可以使用以下代码轻松完成此操作:

library(tidyverse)
library(zoo)

IVdata_FY <- IVdata_final %>% 
  mutate(
    fy = case_when(
      month <= "Sep 2017" ~ "FY17",
      month >= "Oct 2017" & month <= "Sep 2018" ~ "FY18",
      month >= "Oct 2018" & month <= "Sep 2019" ~ "FY19",
      month >= "Oct 2019" & month <= "Sep 2020" ~ "FY20",
      month >= "Oct 2020" ~ "FY21"
    )
  )

但是,如果我有跨越多个财政年度的数据,这种手工方法会过度而且容易出错。

有没有一种简单的方法来识别财政年度,而不必为每个财政年度详细说明时间范围?我的直觉是它会涉及动物园如何存储 yearmon 数据,但我一直无法弄清楚我可以使用什么代码。

您可以从 zoo 对象中提取年份和月份,如果月份大于十月,则将 year 值增加 1。

library(dplyr)
library(lubridate)

IVdata_final %>%
  mutate(date = month, 
         year = year(date), 
         month = month(date),
         fy = paste0('FY', ifelse(month >= 10, year + 1, year))) -> IVdata_FY

IVdata_FY

我们假设会计年度在 9 月结束,因此对应于 10 月、11 月和 12 月的会计年度是下一个日历年,而对于其他月份,会计年度与日历年相同。

通过将 3/12 添加到输入 yearmon 对象,将输入向前推三个月,以便将 10 月、11 月和 12 月推到下一个日历年,但没有其他月份,然后格式:

library(zoo)
ym <- yearmon(2020 + 0:11/12) # test data: Jan '20, Feb '20, ..., Dec '20

format(ym + 3/12, "FY%y")
##  [1] "FY20" "FY20" "FY20" "FY20" "FY20" "FY20" "FY20" "FY20" "FY20" "FY21"
## [11] "FY21" "FY21"