【问题标题】:How to get every quarter of a date interval in R? [duplicate]如何在R中获得日期间隔的每一个季度? [复制]
【发布时间】:2017-01-16 06:00:46
【问题描述】:

我拥有的是一个数据框,其中包含许多产品、价格和对象上线的开始日期/结束日期。

product    startdate    enddate          price
 1         2012-03-17   2016-09-08         10  
 2         2014-05-16   2015-06-29         8 
 3         2015-07-01   2016-04-02         9    

我想要的是获得产品上线的每个季度和每年的时间。例如产品 3:Q3 15、Q4 15、Q1 16、Q2 16。

我已经通过以下方式将其转换为区间类:

library(lubridate) 
interval <- interval(startdate,enddate)
interval

我搜索了一种方法来使季度超出该区间,但找不到解决方案。

我的总体目标是计算每个季度在线上每种产品的平均价格。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    如果df 是您的数据框,则以下内容会生成从startdateenddate 的所有月份的序列,保留产品和季度的唯一组合以及计算平均值。

    library(lubridate)
    library(dplyr)
    
    df <- df %>%
      mutate(startdate = ymd(startdate),
             enddate = ymd(enddate)) 
    
    df$output <- mapply(function(x,y) seq(x, y, by =  "month"),
                        df$startdate,
                        df$enddate)
    
    df %>% 
      tidyr::unnest(output) %>%
      mutate(quarter = paste0("Q",quarter(output), " ", year(output))) %>%
      select(-output) %>%
      group_by(product, startdate, enddate, quarter) %>%
      filter(row_number(quarter) == 1) %>%
      summarise(mean(price))
    

    数据框第一行的结果是:

       product  startdate    enddate quarter `mean(price)`
         <int>     <date>     <date>   <chr>         <dbl>
    1        1 2012-03-17 2016-09-08 Q1 2012            10
    2        1 2012-03-17 2016-09-08 Q1 2013            10
    3        1 2012-03-17 2016-09-08 Q1 2014            10
    4        1 2012-03-17 2016-09-08 Q1 2015            10
    5        1 2012-03-17 2016-09-08 Q1 2016            10
    6        1 2012-03-17 2016-09-08 Q2 2012            10
    7        1 2012-03-17 2016-09-08 Q2 2013            10
    8        1 2012-03-17 2016-09-08 Q2 2014            10
    9        1 2012-03-17 2016-09-08 Q2 2015            10
    10       1 2012-03-17 2016-09-08 Q2 2016            10
    11       1 2012-03-17 2016-09-08 Q3 2012            10
    12       1 2012-03-17 2016-09-08 Q3 2013            10
    13       1 2012-03-17 2016-09-08 Q3 2014            10
    14       1 2012-03-17 2016-09-08 Q3 2015            10
    15       1 2012-03-17 2016-09-08 Q3 2016            10
    16       1 2012-03-17 2016-09-08 Q4 2012            10
    17       1 2012-03-17 2016-09-08 Q4 2013            10
    18       1 2012-03-17 2016-09-08 Q4 2014            10
    19       1 2012-03-17 2016-09-08 Q4 2015            10
    

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多