2016-09-08 10 views
2

私が持っているものは、多くの製品、価格、開始日/終了日を持つデータフレームです。オブジェクトはオンラインになっています。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

Iはすでに介し間隔クラスにそれを形質

:私はそれから四半期を取得する方法を探し

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 
関連する問題