我希望从11月开始的会计年度(即会计年度的第一天是11月1日)检索月份号。以下代码提供了我的 所需 输出,它借用了week_start
的{{1}}语法,其中lubridate::wday
类似于{{1} }:
year_start
由于尚不存在此功能,因此我正在寻找提供相同输出的替代解决方案。在每个日期中添加week_start
无效,因为不同月份的长度会导致问题在月份之间转换(例如3月31日减去一个月= 2月31日,这没有意义)。
我在lubridate github here上检查了一个类似的问题,但没有找到任何解决方案。有人能提供我想要的功能吗?
非常感谢,
答案 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