绘制重叠时间段的数据

时间:2014-04-17 23:48:58

标签: r ggplot2 time-series

我有一个类似下面的政策数据框

df<-data.frame(start=as.Date(c("2012-1-1","2012-3-1","2012-3-15")),end=as.Date(c("2012-12-31","2012-8-31","2012-12-31")),
           premium=c(500,200,300))
df
       start        end premium
1 2012-01-01 2012-12-31     500
2 2012-03-01 2012-08-31     200
3 2012-03-15 2012-12-31     300

我想使用ggplot绘制从2012-01-01和2012-03-15开始的每日总保费。

要了解赚取的保费,请考虑2012年的第一天。只有一项保单生效。这项政策的总保费为500,并且持续365天,因此在2012年1月1日获得的保费将为500/365。同样,由于政策1和2生效,因此在第3/1/12天获得的保费将为500/365 + 200/183。

那么,我如何计算2012年全年的保费?

1 个答案:

答案 0 :(得分:0)

    df$numdays <- as.numeric(df$end - df$start)
    df$daily_premium <- df$premium / df$numdays

    days_2012 <- seq.Date(from=as.Date('2012-01-01'), to=as.Date('2012-12-31'),by=1)

    check_range <- function(day_i) apply(df, 1, function(x) ifelse(day_i >= x['start'] && day_i <= x['end'], x['daily_premium'], 0))

    day_tally <- sapply(days_2012, check_range)

    day_sums <- colSums(apply(day_tally,2,as.numeric))

    qplot(days_2012,day_sums)