The function splits rows with a time period longer than one month to multiple rows with a time period of exactly one month each. Values in numeric columns (e.g. exposure or premium) are divided over the months proportionately.
Details
In insurance portfolios it is common that rows relate to periods longer than one month. This is for example problematic in case exposures per month are desired.
Since insurance premiums are constant over the months, and do not depend on the number of days per month, the function assumes that each month has the same number of days (i.e. 30).
Examples
library(lubridate)
#>
#> Attaching package: ‘lubridate’
#> The following objects are masked from ‘package:base’:
#>
#> date, intersect, setdiff, union
portfolio <- data.frame(
begin1 = ymd(c("2014-01-01", "2014-01-01")),
end = ymd(c("2014-03-14", "2014-05-10")),
termination = ymd(c("2014-03-14", "2014-05-10")),
exposure = c(0.2025, 0.3583),
premium = c(125, 150))
period_to_months(portfolio, begin1, end, premium, exposure)
#> id begin1 end termination exposure premium
#> <int> <Date> <Date> <Date> <num> <num>
#> 1: 1 2014-01-01 2014-01-31 2014-03-14 0.08209459 50.67568
#> 2: 1 2014-02-01 2014-02-28 2014-03-14 0.08209459 50.67568
#> 3: 1 2014-03-01 2014-03-31 2014-03-14 0.03831081 23.64865
#> 4: 2 2014-01-01 2014-01-31 2014-05-10 0.08268462 34.61538
#> 5: 2 2014-02-01 2014-02-28 2014-05-10 0.08268462 34.61538
#> 6: 2 2014-03-01 2014-03-31 2014-05-10 0.08268462 34.61538
#> 7: 2 2014-04-01 2014-04-30 2014-05-10 0.08268462 34.61538
#> 8: 2 2014-05-01 2014-05-31 2014-05-10 0.02756154 11.53846