r cuenta con la función cut para crear grupos con etiquetas de una variable numérica. Usaremos esta función ajustada a :
cut# Definamos la función
f_grupo_edad <- function(x, edad_final = 80, grupo = 5, ...) {
# Creamos un vector númerico desde el cero hasta la edad con una amplitud
seq_edades <- seq(0, edad_final, grupo)
# Número de grupos que se crearon
n <- length(seq_edades)
# Creamos un vector para las edades inferiores de cada intervalo de edad
seq_edades_sup <- c(seq_edades + grupo - 1)[-n]
# Creamos los labels de los grupos!
labs <- c(paste0(seq_edades[-n], "-", seq_edades_sup), paste0(seq_edades[n], "+"))
# Colocamos todo en su lugar
cut(x, c(seq_edades, 200),
labels = labs, right = FALSE, include.lowest = TRUE, ...)
}
# creamos un dataframe de ejemplo aleatorio para probar la función
df <- data.frame(
id = 1:100,
edad = floor(runif(100, 0, 150))
)
# grupos quinquenales
df$grupo_edad_5 <- f_grupo_edad(df$edad,
edad_final = 100, # edad final
grupo = 5 # amplitud de los grupos de edad quinquenales
)
# grupos decenales
df$grupo_edad_10 <- f_grupo_edad(df$edad,
edad_final = 100,
grupo = 10
)
# grupos de 20 años
df$grupo_edad_20 <- f_grupo_edad(df$edad,
edad_final = 100,
grupo = 20
)
# ordenamos las edades
df <- df[order(df$edad), ]
# miramos los levels de las variables ya que son factores
sapply(df[3:5], levels)
## $grupo_edad_5
## [1] "0-4" "5-9" "10-14" "15-19" "20-24" "25-29" "30-34" "35-39" "40-44"
## [10] "45-49" "50-54" "55-59" "60-64" "65-69" "70-74" "75-79" "80-84" "85-89"
## [19] "90-94" "95-99" "100+"
##
## $grupo_edad_10
## [1] "0-9" "10-19" "20-29" "30-39" "40-49" "50-59" "60-69" "70-79" "80-89"
## [10] "90-99" "100+"
##
## $grupo_edad_20
## [1] "0-19" "20-39" "40-59" "60-79" "80-99" "100+"
# miramos el dataframe
df
## id edad grupo_edad_5 grupo_edad_10 grupo_edad_20
## 31 31 1 0-4 0-9 0-19
## 32 32 4 0-4 0-9 0-19
## 44 44 6 5-9 0-9 0-19
## 97 97 7 5-9 0-9 0-19
## 13 13 8 5-9 0-9 0-19
## 61 61 10 10-14 10-19 0-19
## 12 12 12 10-14 10-19 0-19
## 39 39 12 10-14 10-19 0-19
## 25 25 13 10-14 10-19 0-19
## 27 27 13 10-14 10-19 0-19
## 53 53 13 10-14 10-19 0-19
## 10 10 14 10-14 10-19 0-19
## 21 21 15 15-19 10-19 0-19
## 6 6 16 15-19 10-19 0-19
## 98 98 17 15-19 10-19 0-19
## 35 35 22 20-24 20-29 20-39
## 79 79 22 20-24 20-29 20-39
## 71 71 27 25-29 20-29 20-39
## 54 54 28 25-29 20-29 20-39
## 49 49 29 25-29 20-29 20-39
## 64 64 29 25-29 20-29 20-39
## 51 51 34 30-34 30-39 20-39
## 55 55 34 30-34 30-39 20-39
## 38 38 38 35-39 30-39 20-39
## 63 63 38 35-39 30-39 20-39
## 83 83 38 35-39 30-39 20-39
## 48 48 40 40-44 40-49 40-59
## 78 78 46 45-49 40-49 40-59
## 18 18 47 45-49 40-49 40-59
## 81 81 49 45-49 40-49 40-59
## 100 100 49 45-49 40-49 40-59
## 96 96 51 50-54 50-59 40-59
## 40 40 52 50-54 50-59 40-59
## 58 58 53 50-54 50-59 40-59
## 76 76 53 50-54 50-59 40-59
## 84 84 53 50-54 50-59 40-59
## 75 75 54 50-54 50-59 40-59
## 80 80 54 50-54 50-59 40-59
## 93 93 55 55-59 50-59 40-59
## 29 29 60 60-64 60-69 60-79
## 59 59 61 60-64 60-69 60-79
## 19 19 62 60-64 60-69 60-79
## 94 94 63 60-64 60-69 60-79
## 65 65 64 60-64 60-69 60-79
## 70 70 64 60-64 60-69 60-79
## 95 95 64 60-64 60-69 60-79
## 46 46 65 65-69 60-69 60-79
## 2 2 68 65-69 60-69 60-79
## 30 30 69 65-69 60-69 60-79
## 85 85 70 70-74 70-79 60-79
## 50 50 72 70-74 70-79 60-79
## 52 52 74 70-74 70-79 60-79
## 68 68 74 70-74 70-79 60-79
## 69 69 74 70-74 70-79 60-79
## 82 82 76 75-79 70-79 60-79
## 66 66 77 75-79 70-79 60-79
## 60 60 81 80-84 80-89 80-99
## 42 42 83 80-84 80-89 80-99
## 28 28 88 85-89 80-89 80-99
## 3 3 89 85-89 80-89 80-99
## 24 24 89 85-89 80-89 80-99
## 89 89 89 85-89 80-89 80-99
## 8 8 90 90-94 90-99 80-99
## 16 16 90 90-94 90-99 80-99
## 20 20 91 90-94 90-99 80-99
## 67 67 91 90-94 90-99 80-99
## 92 92 91 90-94 90-99 80-99
## 17 17 92 90-94 90-99 80-99
## 36 36 92 90-94 90-99 80-99
## 34 34 94 90-94 90-99 80-99
## 33 33 101 100+ 100+ 100+
## 47 47 101 100+ 100+ 100+
## 45 45 110 100+ 100+ 100+
## 90 90 110 100+ 100+ 100+
## 77 77 112 100+ 100+ 100+
## 62 62 113 100+ 100+ 100+
## 74 74 117 100+ 100+ 100+
## 11 11 119 100+ 100+ 100+
## 4 4 121 100+ 100+ 100+
## 91 91 121 100+ 100+ 100+
## 1 1 122 100+ 100+ 100+
## 43 43 125 100+ 100+ 100+
## 56 56 126 100+ 100+ 100+
## 86 86 126 100+ 100+ 100+
## 37 37 127 100+ 100+ 100+
## 9 9 129 100+ 100+ 100+
## 41 41 129 100+ 100+ 100+
## 14 14 132 100+ 100+ 100+
## 57 57 132 100+ 100+ 100+
## 7 7 133 100+ 100+ 100+
## 5 5 134 100+ 100+ 100+
## 88 88 136 100+ 100+ 100+
## 23 23 137 100+ 100+ 100+
## 22 22 140 100+ 100+ 100+
## 99 99 140 100+ 100+ 100+
## 72 72 143 100+ 100+ 100+
## 73 73 144 100+ 100+ 100+
## 15 15 148 100+ 100+ 100+
## 26 26 148 100+ 100+ 100+
## 87 87 148 100+ 100+ 100+
Fin!