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