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.
Arguments
- df
data.frame
- begin
name of column
df
with begin dates- end
name of column in
df
with end dates- ...
names of columns in
df
used to group date ranges by- agg_cols
list with columns in
df
to aggregate by (defaults to NULL)- agg
aggregation type (defaults to "sum")
- min.gapwidth
ranges separated by a gap of at least
min.gapwidth
days are not merged. Defaults to 5.
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
df
with begin dates- end
name of column in
df
with end dates- cols
names of columns in
df
used to group date ranges by
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)
#> date type count policy_nr productgroup product
#> 1 2020-02-01 out 1 12345 fire contents
#> 2 2018-10-01 in 1 12345 fire contents
#> 3 2018-01-01 out 1 12345 fire contents
#> 4 2017-09-01 in 1 12345 fire contents
#> 5 2016-02-01 out 1 12345 fire contents
#> 6 2015-10-01 in 1 12345 fire contents
# 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)
#> week type count policy_nr productgroup product
#> 1 2020W06 out 1 12345 fire contents
#> 2 2018W40 in 1 12345 fire contents
#> 3 2018W02 out 1 12345 fire contents
#> 4 2017W35 in 1 12345 fire contents
#> 5 2016W06 out 1 12345 fire contents
#> 6 2015W40 in 1 12345 fire contents