代码之家  ›  专栏  ›  技术社区  ›  DeduciveR

从yeamon对象计算月份的第一天和最后一天

  •  0
  • DeduciveR  · 技术社区  · 6 年前

    我有一个简单的df,其中有一列日期 yearmon 类别:

    df <- structure(list(year_mon = structure(c(2015.58333333333, 2015.66666666667, 
                                      2015.75, 2015.83333333333, 2015.91666666667, 2016, 2016.08333333333, 
                                      2016.16666666667, 2016.25, 2016.33333333333), class = "yearmon")), class = c("tbl_df", 
                                                                                                                   "tbl", "data.frame"), row.names = c(NA, -10L))
    

    我想要一个简单的方法,最好是使用base R, lubridate xts / zoo 计算每个月的第一天和最后一天。

    我见过其他软件包也这么做,但如果可能的话,我想继续使用前面提到的软件包。

    3 回复  |  直到 6 年前
        1
  •  2
  •   akrun    6 年前

    我们可以使用

    library(dplyr)
    library(lubridate)
    library(zoo)
    df %>% 
       mutate(firstday = day(year_mon), last = day(as.Date(year_mon, frac = 1)))
    
        2
  •  2
  •   Ronak Shah    6 年前

    yearmon 对象使用 as.Date 这会给你一个月的第一天。对于最后一天,我们可以将日期增加一个月(1/12),然后从中减去一天。

    df$first_day <- as.Date(df$year_mon)
    df$last_day <- as.Date(df$year_mon + 1/12) - 1
    df  
    
    #   year_mon      first_day  last_day  
    #   <S3: yearmon> <date>     <date>    
    # 1 Aug 2015      2015-08-01 2015-08-31
    # 2 Sep 2015      2015-09-01 2015-09-30
    # 3 Oct 2015      2015-10-01 2015-10-31
    # 4 Nov 2015      2015-11-01 2015-11-30
    # 5 Dec 2015      2015-12-01 2015-12-31
    # 6 Jan 2016      2016-01-01 2016-01-31
    # 7 Feb 2016      2016-02-01 2016-02-29
    # 8 Mar 2016      2016-03-01 2016-03-31
    # 9 Apr 2016      2016-04-01 2016-04-30
    #10 May 2016      2016-05-01 2016-05-31
    
        3
  •  1
  •   G. Grothendieck    6 年前

    使用 as.Date.yearmon frac 指定整个月份要使用的分数金额,以便0为月初,1为月底。 的默认值 压裂

    如果您正在使用,您必须已经在使用zoo yearmon (因为这是 方法),因此这不涉及使用您已经使用的包之外的任何其他包。

    如果您使用的是dplyr,可以选择替换 transform 具有 mutate

    transform(df, first = as.Date(year_mon), last = as.Date(year_mon, frac = 1))
    

    给予:

       year_mon      first       last
    1  Aug 2015 2015-08-01 2015-08-31
    2  Sep 2015 2015-09-01 2015-09-30
    3  Oct 2015 2015-10-01 2015-10-31
    4  Nov 2015 2015-11-01 2015-11-30
    5  Dec 2015 2015-12-01 2015-12-31
    6  Jan 2016 2016-01-01 2016-01-31
    7  Feb 2016 2016-02-01 2016-02-29
    8  Mar 2016 2016-03-01 2016-03-31
    9  Apr 2016 2016-04-01 2016-04-30
    10 May 2016 2016-05-01 2016-05-31
    
    推荐文章