我有一个类似下面的政策数据框
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年全年的保费?
答案 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)