2016-09-08 50 views
2

我所擁有的是一個數據框,其中包含許多產品,價格和startdate/enddate對象已經聯機。如何在R中獲取每個季度的日期間隔?

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 

我搜索一種方式來獲得宿舍出該間隔但無法找到解決方案。

我的總體目標是計算每個季度在線產品的平均價格。

任何幫助,將不勝感激。謝謝!

回答

2

如果df是你的數據幀,什麼下面確實是STARTDATE產生的所有月份的序列結束日期,保持產品和宿舍的獨特組合,並計算平均值。

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 
相關問題