私が持っているのは、オブジェクトがオンラインになっている多くの製品、価格、開始日/終了日を含むデータフレームです。
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、Q216。
私はすでにそれをインターバルクラスに変換しました:
library(lubridate)
interval <- interval(startdate,enddate)
interval
私はその間隔から四半期を取り除く方法を探しましたが、解決策を見つけることができませんでした。
私の全体的な目標は、四半期ごとにオンラインですべての製品の価格の平均を計算することです。
どんな助けでもいただければ幸いです。ありがとうございました!
場合は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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加