使用lubridate检索会计年度的月数

时间:2019-01-24 22:10:06

标签: r lubridate

我希望从11月开始的会计年度(即会计年度的第一天是11月1日)检索月份号。以下代码提供了我的 所需 输出,它借用了week_start的{​​{1}}语法,其中lubridate::wday类似于{{1} }:

year_start

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

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

非常感谢,

2 个答案:

答案 0 :(得分:1)

这不是一个好方法...但是您可以创建一个从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 :(得分:1)

1)润滑 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