【问题标题】:Identify fiscal year for yearmon object in R识别 R 中 yearmon 对象的财政年度
【发布时间】:2021-04-09 06:35:55
【问题描述】:

我有初步的每月签证数据(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"
    )
  )

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

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

【问题讨论】:

    标签: r zoo


    【解决方案1】:

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

    通过向输入 yearmon 对象添加 3/12 将输入向前推三个月,以便将 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"
    

    【讨论】:

    • 谢谢!我不认为要考虑更改基础月份数据。完美运行。
    【解决方案2】:

    您可以从 zoo 对象中提取年份和月份,如果月份大于 10 月,则将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2012-06-02
      相关资源
      最近更新 更多