使用 lubridate 检索财政年度中的月份编号

Retrieving month number in fiscal year using lubridate

我希望从 11 月开始的会计年度中检索月份编号(即会计年度的第一天是 11 月 1 日)。下面的代码提供了我的 desired 输出,借用了 lubridate::wdayweek_start 语法,其中 year_start 是类似于 week_start:

library('lubridate')
dateToRetrieve = ymd('2017-11-05')
#output: [1] "2017-11-05"
monthFromDate = month(dateToRetrieve, year_start=11)
#output: [1] 1

由于此功能尚不存在,我正在寻找可提供相同输出的替代解决方案。向每个日期添加 period(10, units="month") 不起作用,因为不同月份的长度会导致月份之间的转换问题(例如,3 月 31 日减去一个月 = 2 月 31 日,这没有意义)。

我在 lubridate github here 上检查了一个有点类似的问题,但没有看到任何解决方案。有谁知道可以提供我想要的功能吗?

非常感谢,

这不是很好的方法...但是您可以创建从 11 月开始的月份向量范围,调用完整的 month 日期对象,然后 match 这两个对象获取矢量位置。

suppressPackageStartupMessages(library('lubridate'))

x <- format(ISOdate(2004,1:12,1),"%B")[c(11,12,1:10)]

match(as.character(month(ymd('2017-11-05'), label = TRUE, abbr = FALSE)), x)
#> [1] 1
match(as.character(month(ymd('2017-01-15'), label = TRUE, abbr = FALSE)), x)
#> [1] 3
match(as.character(month(ymd('2017-05-01'), label = TRUE, abbr = FALSE)), x)
#> [1] 7

1) lubridate下面x可以是字符向量或Date向量:

x <- "2017-11-05" # test data
(month(x) - 11) %% 12 + 1
## [1] 1

2) 基数 R 要仅使用基数 R 执行此操作,首先计算给出 mx 的月份数,如图所示,然后执行相同的计算:

mx <- as.POSIXlt(x)$mon + 1
(mx - 11) %% 12 + 1
## [1] 1