我拥有的是一个包含许多产品的数据框,价格和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
我搜索了一种方法,让季度离开那段时间,但无法找到解决方案。
我的总体目标是计算每个季度在线每种产品的价格平均值。
任何帮助将不胜感激。谢谢!
答案 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))