reduce {insurancerating} | R Documentation |
Reduce portfolio by merging redundant date ranges
Description
Transform all the date ranges together as a set to produce a
new set of date ranges. Ranges separated by a gap of at least min.gapwidth
days are not merged.
Usage
reduce(df, begin, end, ..., agg_cols = NULL, agg = "sum", min.gapwidth = 5)
Arguments
df |
data.frame |
begin |
name of column |
end |
name of column in |
... |
names of columns in |
agg_cols |
list with columns in |
agg |
aggregation type (defaults to "sum") |
min.gapwidth |
ranges separated by a gap of at least |
Details
This function is adopted from IRanges::reduce()
.
Value
An object of class "reduce"
.
The function summary
is used to obtain and print a summary of the results.
An object of class "reduce"
is a list usually containing at least the
following elements:
df |
data frame with reduced time periods |
begin |
name of column in |
end |
name of column in |
cols |
names of columns in |
Author(s)
Martin Haringa
Examples
portfolio <- structure(list(policy_nr = c("12345", "12345", "12345", "12345",
"12345", "12345", "12345", "12345", "12345", "12345", "12345"),
productgroup = c("fire", "fire", "fire", "fire", "fire", "fire",
"fire", "fire", "fire", "fire", "fire"), product = c("contents",
"contents", "contents", "contents", "contents", "contents", "contents",
"contents", "contents", "contents", "contents"),
begin_dat = structure(c(16709,16740, 16801, 17410, 17440, 17805, 17897,
17956, 17987, 18017, 18262), class = "Date"),
end_dat = structure(c(16739, 16800, 16831, 17439, 17531, 17896, 17955,
17986, 18016, 18261, 18292), class = "Date"),
premium = c(89L, 58L, 83L, 73L, 69L, 94L, 91L, 97L, 57L, 65L, 55L)),
row.names = c(NA, -11L), class = "data.frame")
# Merge periods
pt1 <- reduce(portfolio, begin = begin_dat, end = end_dat, policy_nr,
productgroup, product, min.gapwidth = 5)
# Aggregate per period
summary(pt1, period = "days", policy_nr, productgroup, product)
# Merge periods and sum premium per period
pt2 <- reduce(portfolio, begin = begin_dat, end = end_dat, policy_nr,
productgroup, product, agg_cols = list(premium), min.gapwidth = 5)
# Create summary with aggregation per week
summary(pt2, period = "weeks", policy_nr, productgroup, product)