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

问题描述 投票:1回答:2

我希望从11月开始的会计年度(即会计年度的第一天是11月1日)中检索月份编号。下面的代码提供了我想要的输出,借用week_startlubridate::wday语法,其中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上检查了一个类似的问题,但没有看到任何解决方案。有没有人有想法提供我想要的功能?

非常感谢,

r lubridate
2个回答
1
投票

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

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

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.