Groups numeric age values into categorized age bands using one of three methods: fixed interval ("interval"), equal distance ("distance"), or quantile-based grouping ("quantile"). Supports flexible labeling and language-specific suffixes.

cutage(
  x,
  method = "distance",
  length = 5,
  maxage = 85,
  sep_zero = TRUE,
  breaks = c(seq(0, 85, 5)),
  labels = NULL,
  lang = "cn",
  label_tail = NULL,
  right = FALSE
)

Arguments

x

Numeric vector of ages.

method

Character. Grouping method: "interval" (custom breaks), "distance" (uniform width), or "quantile" (equal-sized groups).

length

Integer. Width of age bands (used only if method = "distance"). Default is 5.

maxage

Numeric. Upper limit of the age range (used in "distance" method).

sep_zero

Logical. Whether to separate age 0 into its own group (only used if method = "distance"). Default is TRUE.

breaks

Numeric vector of breakpoints (required if method = "interval").

labels

Character vector of labels for resulting age groups. If NULL, default interval-style labels are generated.

lang

Output language for default labels, "cn" (Chinese) or "en" (English). Default is "cn".

label_tail

Character string appended to labels, e.g., "yrs". Default depends on lang.

right

Logical. Whether intervals are right-closed. Passed to cut(). Default is FALSE.

Value

A factor variable of age groups with labeled levels.

Examples

ages <- sample(0:101, 200, replace = TRUE)
cutage(ages, method = "distance", length = 5, maxage = 60, sep_zero = TRUE)
#>   [1] 5-9 岁   50-54 岁 50-54 岁 60+ 岁   10-14 岁 20-24 岁 50-54 岁 25-29 岁
#>   [9] 5-9 岁   20-24 岁 60+ 岁   60+ 岁   30-34 岁 60+ 岁   20-24 岁 55-59 岁
#>  [17] 60+ 岁   60+ 岁   20-24 岁 10-14 岁 5-9 岁   60+ 岁   0 岁     60+ 岁  
#>  [25] 55-59 岁 60+ 岁   25-29 岁 25-29 岁 25-29 岁 60+ 岁   5-9 岁   55-59 岁
#>  [33] 25-29 岁 40-44 岁 60+ 岁   5-9 岁   60+ 岁   30-34 岁 60+ 岁   15-19 岁
#>  [41] 60+ 岁   35-39 岁 55-59 岁 15-19 岁 30-34 岁 60+ 岁   30-34 岁 60+ 岁  
#>  [49] 1-4 岁   60+ 岁   60+ 岁   1-4 岁   20-24 岁 5-9 岁   50-54 岁 60+ 岁  
#>  [57] 60+ 岁   40-44 岁 15-19 岁 40-44 岁 30-34 岁 5-9 岁   60+ 岁   60+ 岁  
#>  [65] 45-49 岁 15-19 岁 40-44 岁 60+ 岁   60+ 岁   50-54 岁 50-54 岁 60+ 岁  
#>  [73] 60+ 岁   60+ 岁   60+ 岁   60+ 岁   15-19 岁 60+ 岁   1-4 岁   45-49 岁
#>  [81] 1-4 岁   10-14 岁 20-24 岁 45-49 岁 60+ 岁   60+ 岁   1-4 岁   35-39 岁
#>  [89] 60+ 岁   60+ 岁   10-14 岁 40-44 岁 60+ 岁   60+ 岁   35-39 岁 60+ 岁  
#>  [97] 60+ 岁   60+ 岁   35-39 岁 60+ 岁   60+ 岁   30-34 岁 60+ 岁   60+ 岁  
#> [105] 60+ 岁   45-49 岁 60+ 岁   20-24 岁 60+ 岁   5-9 岁   60+ 岁   35-39 岁
#> [113] 60+ 岁   30-34 岁 60+ 岁   60+ 岁   35-39 岁 60+ 岁   20-24 岁 40-44 岁
#> [121] 40-44 岁 60+ 岁   60+ 岁   40-44 岁 35-39 岁 35-39 岁 30-34 岁 60+ 岁  
#> [129] 10-14 岁 60+ 岁   20-24 岁 60+ 岁   60+ 岁   60+ 岁   30-34 岁 25-29 岁
#> [137] 60+ 岁   45-49 岁 45-49 岁 60+ 岁   60+ 岁   60+ 岁   60+ 岁   60+ 岁  
#> [145] 40-44 岁 35-39 岁 40-44 岁 60+ 岁   25-29 岁 10-14 岁 15-19 岁 60+ 岁  
#> [153] 15-19 岁 60+ 岁   60+ 岁   60+ 岁   40-44 岁 5-9 岁   35-39 岁 60+ 岁  
#> [161] 60+ 岁   60+ 岁   60+ 岁   10-14 岁 1-4 岁   15-19 岁 60+ 岁   10-14 岁
#> [169] 30-34 岁 25-29 岁 20-24 岁 60+ 岁   60+ 岁   15-19 岁 60+ 岁   35-39 岁
#> [177] 45-49 岁 30-34 岁 60+ 岁   25-29 岁 45-49 岁 10-14 岁 50-54 岁 25-29 岁
#> [185] 60+ 岁   45-49 岁 60+ 岁   45-49 岁 50-54 岁 5-9 岁   60+ 岁   10-14 岁
#> [193] 15-19 岁 55-59 岁 1-4 岁   60+ 岁   30-34 岁 45-49 岁 60+ 岁   60+ 岁  
#> 14 Levels: 0 岁 1-4 岁 5-9 岁 10-14 岁 15-19 岁 20-24 岁 25-29 岁 ... 60+ 岁
# Custom breaks
cutage(ages, method = "interval", breaks = c(0, 15, 30, 45, 60, 75, Inf))
#>   [1] 0-14 岁  45-59 岁 45-59 岁 75+ 岁   0-14 岁  15-29 岁 45-59 岁 15-29 岁
#>   [9] 0-14 岁  15-29 岁 75+ 岁   75+ 岁   30-44 岁 75+ 岁   15-29 岁 45-59 岁
#>  [17] 60-74 岁 75+ 岁   15-29 岁 0-14 岁  0-14 岁  75+ 岁   0-14 岁  75+ 岁  
#>  [25] 45-59 岁 75+ 岁   15-29 岁 15-29 岁 15-29 岁 75+ 岁   0-14 岁  45-59 岁
#>  [33] 15-29 岁 30-44 岁 75+ 岁   0-14 岁  75+ 岁   30-44 岁 75+ 岁   15-29 岁
#>  [41] 60-74 岁 30-44 岁 45-59 岁 15-29 岁 30-44 岁 75+ 岁   30-44 岁 60-74 岁
#>  [49] 0-14 岁  60-74 岁 75+ 岁   0-14 岁  15-29 岁 0-14 岁  45-59 岁 75+ 岁  
#>  [57] 75+ 岁   30-44 岁 15-29 岁 30-44 岁 30-44 岁 0-14 岁  60-74 岁 60-74 岁
#>  [65] 45-59 岁 15-29 岁 30-44 岁 75+ 岁   60-74 岁 45-59 岁 45-59 岁 60-74 岁
#>  [73] 60-74 岁 75+ 岁   75+ 岁   75+ 岁   15-29 岁 75+ 岁   0-14 岁  45-59 岁
#>  [81] 0-14 岁  0-14 岁  15-29 岁 45-59 岁 60-74 岁 75+ 岁   0-14 岁  30-44 岁
#>  [89] 60-74 岁 75+ 岁   0-14 岁  30-44 岁 60-74 岁 60-74 岁 30-44 岁 60-74 岁
#>  [97] 75+ 岁   75+ 岁   30-44 岁 75+ 岁   75+ 岁   30-44 岁 75+ 岁   60-74 岁
#> [105] 75+ 岁   45-59 岁 60-74 岁 15-29 岁 60-74 岁 0-14 岁  60-74 岁 30-44 岁
#> [113] 75+ 岁   30-44 岁 75+ 岁   60-74 岁 30-44 岁 75+ 岁   15-29 岁 30-44 岁
#> [121] 30-44 岁 75+ 岁   75+ 岁   30-44 岁 30-44 岁 30-44 岁 30-44 岁 75+ 岁  
#> [129] 0-14 岁  75+ 岁   15-29 岁 75+ 岁   75+ 岁   75+ 岁   30-44 岁 15-29 岁
#> [137] 75+ 岁   45-59 岁 45-59 岁 60-74 岁 75+ 岁   75+ 岁   75+ 岁   75+ 岁  
#> [145] 30-44 岁 30-44 岁 30-44 岁 75+ 岁   15-29 岁 0-14 岁  15-29 岁 75+ 岁  
#> [153] 15-29 岁 75+ 岁   75+ 岁   75+ 岁   30-44 岁 0-14 岁  30-44 岁 60-74 岁
#> [161] 75+ 岁   60-74 岁 75+ 岁   0-14 岁  0-14 岁  15-29 岁 75+ 岁   0-14 岁 
#> [169] 30-44 岁 15-29 岁 15-29 岁 75+ 岁   60-74 岁 15-29 岁 60-74 岁 30-44 岁
#> [177] 45-59 岁 30-44 岁 75+ 岁   15-29 岁 45-59 岁 0-14 岁  45-59 岁 15-29 岁
#> [185] 60-74 岁 45-59 岁 75+ 岁   45-59 岁 45-59 岁 0-14 岁  75+ 岁   0-14 岁 
#> [193] 15-29 岁 45-59 岁 0-14 岁  75+ 岁   30-44 岁 45-59 岁 60-74 岁 75+ 岁  
#> Levels: 0-14 岁 15-29 岁 30-44 岁 45-59 岁 60-74 岁 75+ 岁
# Quantile-based grouping
cutage(ages, method = "quantile")
#>   [1] 0-24 岁       48.5-78.25 岁 48.5-78.25 岁 48.5-78.25 岁 0-24 岁      
#>   [6] 0-24 岁       48.5-78.25 岁 25-47.5 岁    0-24 岁       0-24 岁      
#>  [11] 79.25-100 岁  79.25-100 岁  25-47.5 岁    79.25-100 岁  0-24 岁      
#>  [16] 48.5-78.25 岁 48.5-78.25 岁 79.25-100 岁  0-24 岁       0-24 岁      
#>  [21] 0-24 岁       79.25-100 岁  0-24 岁       79.25-100 岁  48.5-78.25 岁
#>  [26] 79.25-100 岁  25-47.5 岁    25-47.5 岁    25-47.5 岁    79.25-100 岁 
#>  [31] 0-24 岁       48.5-78.25 岁 25-47.5 岁    25-47.5 岁    79.25-100 岁 
#>  [36] 0-24 岁       79.25-100 岁  25-47.5 岁    79.25-100 岁  0-24 岁      
#>  [41] 48.5-78.25 岁 25-47.5 岁    48.5-78.25 岁 0-24 岁       25-47.5 岁   
#>  [46] 79.25-100 岁  25-47.5 岁    48.5-78.25 岁 0-24 岁       48.5-78.25 岁
#>  [51] 79.25-100 岁  0-24 岁       0-24 岁       0-24 岁       48.5-78.25 岁
#>  [56] 79.25-100 岁  79.25-100 岁  25-47.5 岁    0-24 岁       25-47.5 岁   
#>  [61] 25-47.5 岁    0-24 岁       48.5-78.25 岁 48.5-78.25 岁 25-47.5 岁   
#>  [66] 0-24 岁       25-47.5 岁    79.25-100 岁  48.5-78.25 岁 48.5-78.25 岁
#>  [71] 48.5-78.25 岁 48.5-78.25 岁 48.5-78.25 岁 79.25-100 岁  79.25-100 岁 
#>  [76] 79.25-100 岁  0-24 岁       79.25-100 岁  0-24 岁       25-47.5 岁   
#>  [81] 0-24 岁       0-24 岁       0-24 岁       25-47.5 岁    48.5-78.25 岁
#>  [86] 79.25-100 岁  0-24 岁       25-47.5 岁    48.5-78.25 岁 48.5-78.25 岁
#>  [91] 0-24 岁       25-47.5 岁    48.5-78.25 岁 48.5-78.25 岁 25-47.5 岁   
#>  [96] 48.5-78.25 岁 48.5-78.25 岁 79.25-100 岁  25-47.5 岁    79.25-100 岁 
#> [101] 79.25-100 岁  25-47.5 岁    79.25-100 岁  48.5-78.25 岁 79.25-100 岁 
#> [106] 25-47.5 岁    48.5-78.25 岁 0-24 岁       48.5-78.25 岁 0-24 岁      
#> [111] 48.5-78.25 岁 25-47.5 岁    79.25-100 岁  25-47.5 岁    79.25-100 岁 
#> [116] 48.5-78.25 岁 25-47.5 岁    79.25-100 岁  0-24 岁       25-47.5 岁   
#> [121] 25-47.5 岁    79.25-100 岁  79.25-100 岁  25-47.5 岁    25-47.5 岁   
#> [126] 25-47.5 岁    25-47.5 岁    79.25-100 岁  0-24 岁       79.25-100 岁 
#> [131] 0-24 岁       79.25-100 岁  48.5-78.25 岁 79.25-100 岁  25-47.5 岁   
#> [136] 25-47.5 岁    79.25-100 岁  48.5-78.25 岁 25-47.5 岁    48.5-78.25 岁
#> [141] 79.25-100 岁  79.25-100 岁  79.25-100 岁  <NA>          25-47.5 岁   
#> [146] 25-47.5 岁    25-47.5 岁    79.25-100 岁  25-47.5 岁    0-24 岁      
#> [151] 0-24 岁       <NA>          0-24 岁       79.25-100 岁  79.25-100 岁 
#> [156] 79.25-100 岁  25-47.5 岁    0-24 岁       25-47.5 岁    48.5-78.25 岁
#> [161] 79.25-100 岁  48.5-78.25 岁 79.25-100 岁  0-24 岁       0-24 岁      
#> [166] 0-24 岁       48.5-78.25 岁 0-24 岁       25-47.5 岁    25-47.5 岁   
#> [171] 0-24 岁       79.25-100 岁  48.5-78.25 岁 0-24 岁       48.5-78.25 岁
#> [176] 25-47.5 岁    48.5-78.25 岁 25-47.5 岁    48.5-78.25 岁 25-47.5 岁   
#> [181] 25-47.5 岁    0-24 岁       48.5-78.25 岁 25-47.5 岁    48.5-78.25 岁
#> [186] 48.5-78.25 岁 48.5-78.25 岁 25-47.5 岁    48.5-78.25 岁 0-24 岁      
#> [191] 48.5-78.25 岁 0-24 岁       0-24 岁       48.5-78.25 岁 0-24 岁      
#> [196] 79.25-100 岁  25-47.5 岁    25-47.5 岁    48.5-78.25 岁 79.25-100 岁 
#> Levels: 0-24 岁 25-47.5 岁 48.5-78.25 岁 79.25-100 岁