【问题标题】:Retrieving month number in fiscal year using lubridate使用 lubridate 检索会计年度的月份数
【发布时间】:2019-01-24 22:10:05
【问题描述】:

我希望从 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 上检查了一个类似的问题,但没有看到任何解决方案。有没有人有想法可以提供我想要的功能?

非常感谢,

【问题讨论】:

    标签: r lubridate


    【解决方案1】:

    1) lubridatex 下方可以是字符向量或Date 向量:

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

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

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

    【讨论】:

    • 如果日期的格式为“2017-Dec-12?!出于学习目的而询问。
    • 问题中表格的日期必须;否则,首先对其进行转换,例如x &lt;- ymd("2017-Dec-12")
    • 谢谢。转换这些日期的最简单方法是什么?!最近让我很难受。
    • 将其添加到我的最后一条评论中。
    • 谢谢!这就是我所希望的。
    【解决方案2】:

    这不是一个漂亮的方法...但是您可以从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多