Title: | Collection of Functions for Working with Age Intervals |
---|---|
Description: | Provides a collection of efficient functions for working with individual ages and corresponding intervals. These include functions for conversion from an age to an interval, aggregation of ages with associated counts in to intervals and the splitting of interval counts based on specified age distributions. |
Authors: | Tim Taylor [aut, cre, cph] , Edwin van Leeuwen [aut] |
Maintainer: | Tim Taylor <[email protected]> |
License: | GPL-2 |
Version: | 0.0.7 |
Built: | 2024-12-06 18:38:28 UTC |
Source: | CRAN |
breaks_to_interval()
takes a specified set of breaks representing the left
hand limits of a closed open interval, i.e [x, y), and returns the
corresponding interval and upper bounds. The resulting intervals span from
the minimum break through to a specified max_upper
.
breaks_to_interval(breaks, max_upper = Inf)
breaks_to_interval(breaks, max_upper = Inf)
breaks |
1 or more non-negative cut points in increasing (strictly) order. These correspond to the left hand side of the desired intervals (e.g. the closed side of [x, y). Double values are coerced to integer prior to categorisation. |
max_upper |
Represents the maximum upper bound splitting the data. Defaults to |
A tibble with an ordered factor column (interval
),
as well as columns corresponding to the explicit bounds (lower_bound
and
upper_bound
). Note that even those these bounds are whole numbers they are
returned as numeric
to allow the maximum upper bound to be given as Inf
.
breaks_to_interval(breaks = c(0L, 1L, 5L, 15L, 25L, 45L, 65L)) breaks_to_interval( breaks = c(0L, 1L, 5L, 15L, 25L, 45L, 65L), max_upper = 100L )
breaks_to_interval(breaks = c(0L, 1L, 5L, 15L, 25L, 45L, 65L)) breaks_to_interval( breaks = c(0L, 1L, 5L, 15L, 25L, 45L, 65L), max_upper = 100L )
cut_ages()
provides categorisation of ages based on specified breaks
which represent the left-hand interval limits. The resulting intervals span
from the minimum break through to a specified max_upper
and will always be
closed on the left and open on the right. Ages below the minimum break, or
above max_upper
will be returned as NA.
cut_ages(ages, breaks, max_upper = Inf)
cut_ages(ages, breaks, max_upper = Inf)
ages |
Vector of age values. Double values are coerced to integer prior to categorisation / aggregation. Must not be NA. |
breaks |
1 or more non-negative cut points in increasing (strictly) order. These correspond to the left hand side of the desired intervals (e.g. the closed side of [x, y). Double values are coerced to integer prior to categorisation. |
max_upper |
Represents the maximum upper bound for the resulting intervals. Double values are rounded up to the nearest (numeric) integer. Defaults to |
A data frame with an ordered factor column (interval
), as well as columns
corresponding to the explicit bounds (lower_bound
and upper_bound
).
Internally both bound columns are stored as double but it can be taken as
part of the function API that lower_bound
is coercible to integer without
any coercion to NA_integer_
. Similarly all values of upper_bound
apart
from those corresponding to max_upper
can be assumed coercible to integer
(max_upper
may or may not depending on the given argument).
cut_ages(ages = 0:9, breaks = c(0L, 3L, 5L, 10L)) cut_ages(ages = 0:9, breaks = c(0L, 5L)) # Note the following is comparable to a call to # cut(ages, right = FALSE, breaks = c(breaks, Inf)) ages <- seq.int(from = 0, by = 10, length.out = 10) breaks <- c(0, 1, 10, 30) cut_ages(ages, breaks) # values above max_upper treated as NA cut_ages(ages = 0:10, breaks = c(0,5), max_upper = 7)
cut_ages(ages = 0:9, breaks = c(0L, 3L, 5L, 10L)) cut_ages(ages = 0:9, breaks = c(0L, 5L)) # Note the following is comparable to a call to # cut(ages, right = FALSE, breaks = c(breaks, Inf)) ages <- seq.int(from = 0, by = 10, length.out = 10) breaks <- c(0, 1, 10, 30) cut_ages(ages, breaks) # values above max_upper treated as NA cut_ages(ages = 0:10, breaks = c(0,5), max_upper = 7)
A dataset derived from the 2021 UK census containing population for different age categories across England and Wales.
pop_dat
pop_dat
A data frame with 200 rows and 6 variables:
Unique area identifier
Unique area name
Left-closed and right-open age interval
count of individ
https://github.com/TimTaylor/census_pop_2021
reaggregate_counts()
converts counts over one interval range to another
with optional weighting by a known population.
reaggregate_counts(...) ## Default S3 method: reaggregate_counts( bounds, counts, new_bounds, ..., population_bounds = NULL, population_weights = NULL )
reaggregate_counts(...) ## Default S3 method: reaggregate_counts( bounds, counts, new_bounds, ..., population_bounds = NULL, population_weights = NULL )
... |
Further arguments passed to or from other methods. |
bounds |
The current boundaries in (strictly) increasing order. These correspond to the left hand side of the intervals (e.g. the closed side of [x, y). Double values are coerced to integer prior to categorisation. |
counts |
Vector of counts corresponding to the intervals defined by |
new_bounds |
The desired boundaries in (strictly) increasing order. |
population_bounds |
Interval boundaries for a known population weighting given by the
|
population_weights |
Population weightings corresponding to Used to weight the output across the desired intervals. If |
A data frame with 4 entries; interval
, lower_bound
, upper_bound
and a
corresponding count
.
# Reaggregating some data obtained from the 2021 UK census head(pop_dat) # Each row of the data is for the same region so we can drop some columns # `age_category` and `value` columns dat <- subset(pop_dat, select = c(age_category, value)) # Add the lower bounds to the data dat <- transform( dat, lower_bound = as.integer(sub("\\[([0-9]+), .+)", "\\1", age_category)) ) # Now recategorise to the desired age intervals with( dat, reaggregate_counts( bounds = lower_bound, counts = value, new_bounds = c(0L, 1L, 5L, 15L, 25L, 45L, 65L) ) )
# Reaggregating some data obtained from the 2021 UK census head(pop_dat) # Each row of the data is for the same region so we can drop some columns # `age_category` and `value` columns dat <- subset(pop_dat, select = c(age_category, value)) # Add the lower bounds to the data dat <- transform( dat, lower_bound = as.integer(sub("\\[([0-9]+), .+)", "\\1", age_category)) ) # Now recategorise to the desired age intervals with( dat, reaggregate_counts( bounds = lower_bound, counts = value, new_bounds = c(0L, 1L, 5L, 15L, 25L, 45L, 65L) ) )
reaggregate_rates()
converts rates over one interval range to another
with optional weighting by a known population.
reaggregate_rates(...) ## Default S3 method: reaggregate_rates( bounds, rates, new_bounds, ..., population_bounds = NULL, population_weights = NULL )
reaggregate_rates(...) ## Default S3 method: reaggregate_rates( bounds, rates, new_bounds, ..., population_bounds = NULL, population_weights = NULL )
... |
Further arguments passed to or from other methods. |
bounds |
The current boundaries in (strictly) increasing order. These correspond to the left hand side of the intervals (e.g. the closed side of [x, y). Double values are coerced to integer prior to categorisation. |
rates |
Vector of rates corresponding to the intervals defined by |
new_bounds |
The desired boundaries in (strictly) increasing order. |
population_bounds |
Interval boundaries for a known population weighting given by the
|
population_weights |
Population weightings corresponding to Used to weight the output across the desired intervals. If |
A data frame with 4 entries; interval
, lower_bound
, upper_bound
and a
corresponding rate
.
reaggregate_rates( bounds = c(0, 5, 10), rates = c(0.1, 0.2 ,0.3), new_bounds = c(0, 2, 7, 10), population_bounds = c(0, 2, 5, 7, 10), population_weights = c(100, 200, 50, 150, 100) )
reaggregate_rates( bounds = c(0, 5, 10), rates = c(0.1, 0.2 ,0.3), new_bounds = c(0, 2, 7, 10), population_bounds = c(0, 2, 5, 7, 10), population_weights = c(100, 200, 50, 150, 100) )