如何获得R中每个季度的日期间隔?

时间:2016-09-08 10:32:27

标签: r

我拥有的是一个包含许多产品的数据框,价格和startdate / enddate对象已经在线。

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

我搜索了一种方法,让季度离开那段时间,但无法找到解决方案。

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

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

1 个答案:

答案 0 :(得分:2)

如果您的数据框为private void App_OnStartup(object sender, StartupEventArgs e) { new MainWindow { DataContext = new MainViewModel() }.Show(); } ,则以下操作会生成从 startdate enddate 的所有月份的序列,保留产品和产品的唯一组合四分之一并计算平均值。

df

数据框第一行的结果为:

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))