Proyección de datos indeterminados en las manzanas de Chile, basados en los microdatos del Censo del 2017 y aplicación de rangos de distancia a establecimientos de interés social**

VE-CC

DataIntelligence
25-10-2021

1 Introducción

1.1 Lectura de la tabla madre

Por alguna razón, la base de datos de los Censos de población y y vivienda a nivel de manzanas en Chile no están en la página misma del Censo, sino en la del INE.

Con ella se contruyó una tabla excel con datos sociales y geográficos. Deseamos imputar los valores sociales indeterminados mediante proporciones de los datos existentes y añadir columnas con información categórica que indique la distancia de la manzana a diversos centros de servicios sociales, como por ejemplo a un retén de carabineros, un establecimientos de salud o educación.

Convertimos el excel a formato rds para disminuir la velocidad de carga:

# bd_manzanas <- read_xlsx("tabla_madre_trabajo.xlsx", sheet = 2 )
# bd_manzanas <- saveRDS(bd_manzanas,"tabla_madre_trabajo.xlsx.rds")
bd_manzanas <- readRDS("tabla_madre_trabajo.rds")

1.2 Primer tratamiento

Extraemos las variables de interés, nombramos correctamente las cabeceras y convertimos a tipo numérico los campos que deben serlo. En definitiva, construímos nuestro dataframe de trabajo.

colnames(bd_manzanas) <- c(paste0(bd_manzanas[1,]))
bd_manzanas <- bd_manzanas[-1,]
datos_pob <- bd_manzanas[,c("TOTAL_PERS","TOTAL_HOMB","TOTAL_MUJE","PERSONAS_0","PERSONAS_6","PERSONAS_1","PERSONAS_M","PERSONAS_E","PUEBLOS_IN","COD_ZonLoc","COD_MzEnt","1_MEAN","2_MEAN","3_MEAN","4_MEAN","5_MEAN","6_MEAN","7_MEAN","8_MEAN","CATEGORIA", "id_ciud_N")]
datos_pob$TOTAL_PERS <-  as.numeric(datos_pob$TOTAL_PERS)
datos_pob$TOTAL_HOMB <-  as.numeric(datos_pob$TOTAL_HOMB)
datos_pob$TOTAL_MUJE <-  as.numeric(datos_pob$TOTAL_MUJE)
datos_pob$PERSONAS_0 <-  as.numeric(datos_pob$PERSONAS_0)
datos_pob$PERSONAS_6 <-  as.numeric(datos_pob$PERSONAS_6)
datos_pob$PERSONAS_1 <-  as.numeric(datos_pob$PERSONAS_1)
datos_pob$PERSONAS_M <-  as.numeric(datos_pob$PERSONAS_M)
datos_pob$PERSONAS_E <-  as.numeric(datos_pob$PERSONAS_E)
datos_pob$PUEBLOS_IN <-  as.numeric(datos_pob$PUEBLOS_IN)

colnames(datos_pob) <- c("PERSONAS","HOMBRES","MUJERES","EDAD_0A5","EDAD_6A14","EDAD_15A64","EDAD_65YMAS","INMIGRANTES","PUEBLO","COD_ZonLoc","COD_MzEnt","1_MEAN","2_MEAN","3_MEAN","4_MEAN","5_MEAN","6_MEAN","7_MEAN","8_MEAN","CATEGORIA","id_ciud_N")


¿Cuántos registros son?

nrow(datos_pob)
## [1] 151501


Veamos los primeros 1000:

datos_pob_sub <- datos_pob[c(1:1000),]
datatable(datos_pob_sub, extensions = 'Buttons', escape = FALSE, rownames = FALSE,
          options = list(dom = 'Bfrtip',
          buttons = list('colvis', list(extend = 'collection',
          buttons = list(
          list(extend='copy'),
          list(extend='excel',
            filename = 'dataset_subseteado'),
          list(extend='pdf',
            filename= 'dataset_subseteado')),
          text = 'Download')), scrollX = TRUE))

Existen algunos valores indeterminados en los campos de hombres y mujeres que debemos imputar.

1.3 Imputación de hombres y mujeres

Sobre nuestro dataframe de trabajo imputaremos los valores de hombres y mujeres indeterminados y construiremos un rds para hacer eficientes las lecturas:

# El código comentado se utiliza para construir el rds:

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# 
# # se considera una zona (cada vez del for)
# pob_zona <- filter(datos_pob, COD_ZonLoc== z)
# 
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# 
# pob_zona_0 <- filter(pob_zona, HOMBRES == -1)
# 
# porcent_h <-  sum(pob_zona$HOMBRES)/sum(pob_zona$PERSONAS)
# porcent_m <-  sum(pob_zona$MUJERES)/sum(pob_zona$PERSONAS)
# 
# filtro2 <- filter(pob_zona_0, pob_zona_0$HOMBRES == -1)
# 
# filtro2$HOMBRES <- ifelse(porcent_h*filtro2$PERSONAS > porcent_m*filtro2$PERSONAS, ceiling(porcent_h*filtro2$PERSONAS) ,floor(porcent_h*filtro2$PERSONAS) )
# 
# filtro2$MUJERES <- ifelse(porcent_m*filtro2$PERSONAS > porcent_h*filtro2$PERSONAS, ceiling(porcent_m*filtro2$PERSONAS) ,floor(porcent_m*filtro2$PERSONAS) )
# 
# pob_final <- rbind(filter(pob_zona, HOMBRES != -1),filtro2)
# 
# poblacion_final <- rbind(poblacion_final,pob_final)
# 
# }

# tb1 <- poblacion_final
# 
# saveRDS(tb1,"tabla_h_y_m.rds")

tb1 <- readRDS("tabla_h_y_m.rds")

Veamos los 100 primeros registros de la tabla corregida sobre los sexos:

tb1_sub <- tb1[c(1:100),]

tb1_sub <- tb1_sub[,-c(4:9,12:21),drop=FALSE]  # still a data.frame

datatable(tb1_sub, extensions = 'Buttons', escape = FALSE, rownames = FALSE,
          options = list(dom = 'Bfrtip',
          buttons = list('colvis', list(extend = 'collection',
          buttons = list(
          list(extend='copy'),
          list(extend='excel',
            filename = 'dataset_subseteado'),
          list(extend='pdf',
            filename= 'dataset_subseteado')),
          text = 'Download')), scrollX = TRUE))

Los registros siguen siendo 151501

nrow(tb1)
## [1] 151501

1.3.1 Verificación

Para verificar lo correcto del código observemos los NAs existentes en las celdas de hombres y mujeres en las manzanas 3101031001017 y 3101031001021 de la zona 3101031001 de la tabla excel madre:

Subseteemos la tabla de trabajo por la zona 3101031001 y revisemos los datos faltantes para hombres y mujeres. Ignoremos los demas campos por el momento:

tb1_3101031001 <- tb1[tb1$COD_ZonLoc == 3101031001, ]

Resultan sólo 25 registros:

tb1_3101031001 <- tb1_3101031001[,-c(4:9,12:21),drop=FALSE]  # still a data.frame

datatable(tb1_3101031001, extensions = 'Buttons', escape = FALSE, rownames = FALSE,
          options = list(dom = 'Bfrtip',
          buttons = list('colvis', list(extend = 'collection',
          buttons = list(
          list(extend='copy'),
          list(extend='excel',
            filename = 'dataset_subseteado'),
          list(extend='pdf',
            filename= 'dataset_subseteado')),
          text = 'Download')), scrollX = TRUE))

Y vemos que la imputación resulta correcta:


1.4 Imputación de edades

1.4.1 En el rango de 0 a 5 años (EDAD_0A5)

# El código comentado se utiliza para construir el rds:

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# #
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, EDAD_0A5 == -1 )
# #
# porcent_edad <-  sum(filter(pob_zona, EDAD_0A5 >= 0)[4])/sum(pob_zona$PERSONAS)
# #
# filtro2 <- filter(pob_zona_0, pob_zona_0$EDAD_0A5 == -1)
# filtro2$EDAD_0A5 <- plyr::round_any(porcent_edad*filtro2$PERSONAS,1)
# #
# pob_final <- rbind(filter(pob_zona, EDAD_0A5 != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# }
# tb1 <- poblacion_final

# saveRDS(tb1,"EDAD_0A5.rds")
# r_0 <- tb1[order( tb1[,11] ),]
# r_0 <- r_0[c(1:100),]
# r_0

6 a 14

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# 
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, EDAD_6A14 == -1 )
# 
# porcent_edad <-  sum(filter(pob_zona, EDAD_6A14 >= 0)[5])/sum(pob_zona$PERSONAS)
# 
# filtro2 <- filter(pob_zona_0, pob_zona_0$EDAD_6A14 == -1)
# filtro2$EDAD_6A14 <- round_any(porcent_edad*filtro2$PERSONAS,1)
# 
# pob_final <- rbind(filter(pob_zona, EDAD_6A14 != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# }
# tb1 <- poblacion_final

# saveRDS(tb1,"EDAD_6A14.rds")
# r_0 <- tb1[order( tb1[,11] ),]
# r_0 <- r_0[c(1:100),]
# r_0

EDAD_15A64

# poblacion_final <- data.frame()
# # 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# #   
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, EDAD_15A64 == -1 )
# #  
# porcent_edad <-  sum(filter(pob_zona, EDAD_15A64 >= 0)[6])/sum(pob_zona$PERSONAS) 
# #  
# filtro2 <- filter(pob_zona_0, pob_zona_0$EDAD_15A64 == -1) 
# filtro2$EDAD_15A64 <- round_any(porcent_edad*filtro2$PERSONAS,1)
# # 
# pob_final <- rbind(filter(pob_zona, EDAD_15A64 != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# }
# tb1 <- poblacion_final


# saveRDS(tb1,"EDAD_15A64.rds")
# r_0 <- tb1[order( tb1[,11] ),]
# r_0 <- r_0[c(1:100),]
# r_0

2 Cálculo EDAD_65YMAS

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# 
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, EDAD_65YMAS == -1 )
# 
# porcent_edad <-  sum(filter(pob_zona, EDAD_65YMAS >= 0)[7])/sum(pob_zona$PERSONAS)
# 
# filtro2 <- filter(pob_zona_0, pob_zona_0$EDAD_65YMAS == -1)
# filtro2$EDAD_65YMAS <- round_any(porcent_edad*filtro2$PERSONAS,1)
# 
# pob_final <- rbind(filter(pob_zona, EDAD_65YMAS != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# }
# tb1 <- poblacion_final
# saveRDS(tb1,"EDAD_65YMAS.rds")

tb1 <- readRDS("EDAD_65YMAS.rds")

tb1 resulta la tabla final en cuanto sexo y edades. Veamos sus 6 primeros registros:

head(tb1)
## # A tibble: 6 x 21
##   PERSONAS HOMBRES MUJERES EDAD_0A5 EDAD_6A14 EDAD_15A64 EDAD_65YMAS INMIGRANTES
##      <dbl>   <dbl>   <dbl>    <dbl>     <dbl>      <dbl>       <dbl>       <dbl>
## 1       65      36      29        5         6         40          14          -1
## 2      191     105      86       20        21        123          27          11
## 3      102      49      53        4        14         64          20          -1
## 4       69      40      29        7         5         47          10          -1
## 5      554     265     289       56       124        354          20          24
## 6       58      25      33        7         5         32          14           0
## # ... with 13 more variables: PUEBLO <dbl>, COD_ZonLoc <chr>, COD_MzEnt <chr>,
## #   1_MEAN <chr>, 2_MEAN <chr>, 3_MEAN <chr>, 4_MEAN <chr>, 5_MEAN <chr>,
## #   6_MEAN <chr>, 7_MEAN <chr>, 8_MEAN <chr>, CATEGORIA <chr>, id_ciud_N <chr>
# r_0 <- tb1[order( tb1[,11] ),]
# r_0 <- r_0[c(1:100),]
# r_0
# writexl::write_xlsx(tb1,"sexo_y_edad.xlsx")
0+  0+  24+ 6
## [1] 30
5+  6+  34+ 12  
## [1] 57
35+ 29
## [1] 64

2.1 Cálculo INMIGRANTES

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# 
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, INMIGRANTES == -1 )
# 
# porcent_edad <-  sum(filter(pob_zona, INMIGRANTES >= 0)[8])/sum(pob_zona$PERSONAS)
# 
# filtro2 <- filter(pob_zona_0, pob_zona_0$INMIGRANTES == -1)
# filtro2$INMIGRANTES <- round_any(porcent_edad*filtro2$PERSONAS,1)
# 
# pob_final <- rbind(filter(pob_zona, INMIGRANTES != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# 
# }
# tb1 <- poblacion_final
# 
# saveRDS(tb1,"inmigrantes.rds")

# tb1 <- readRDS("inmigrantes.rds")

2.2 Cálculo PUEBLO INDÍGENA

# poblacion_final <- data.frame()
# 
# for (z in unique(datos_pob$COD_ZonLoc)) {
# 
# pob_zona <- filter(tb1, COD_ZonLoc== z)
# pob_zona <- mutate_all(pob_zona, ~replace(., is.na(.), -1))
# pob_zona_0 <- filter(pob_zona, PUEBLO == -1 )
# 
# porcent_edad <-  sum(filter(pob_zona, PUEBLO >= 0)[8])/sum(pob_zona$PERSONAS)
# 
# filtro2 <- filter(pob_zona_0, pob_zona_0$PUEBLO == -1)
# filtro2$PUEBLO <- round_any(porcent_edad*filtro2$PERSONAS,1)
# 
# pob_final <- rbind(filter(pob_zona, PUEBLO != -1),filtro2)
# poblacion_final <- rbind(poblacion_final,pob_final)
# }
# tb1 <- poblacion_final
# 
# saveRDS(tb1,"pueblos_y_final.rds")

tb1 <- readRDS("pueblos_y_final.rds")
# writexl::write_xlsx(tb1,"sexo_edad_inmi_pueblos.xlsx")

2.3 Rangos de variables

2.3.1 Leamos nuevamente la tabla madre y despleguemos los 10 primeros registros:

bd_manzanas <- readRDS("tabla_madre_trabajo.rds")
colnames(bd_manzanas) <- c(paste0(bd_manzanas[1,]))
bd_manzanas <- bd_manzanas[-1,]

bd_manzanas_data <- as.data.frame(bd_manzanas)
bd_manzanas_1 <- head(bd_manzanas_data,10)

# datatable(bd_manzanas_1, extensions = 'Buttons', escape = FALSE, rownames = FALSE,
#           options = list(dom = 'Bfrtip',
#           buttons = list('colvis', list(extend = 'collection',
#           buttons = list(
#           list(extend='copy'),
#           list(extend='excel',
#             filename = 'dataset_subseteado'),
#           list(extend='pdf',
#             filename= 'dataset_subseteado')),
#           text = 'Download')), scrollX = TRUE))

2.3.2 De la tabla extraemos los códigos

Salud

# bd_manzanas <- readRDS("v2_13_Variables_Euclidean_manzanas_extrapolar.rds")
# colnames(bd_manzanas) <- c(paste0(bd_manzanas[1,]))
# bd_manzanas <- bd_manzanas[-1,]
# bd_manzanas
 
rangos <- read_xlsx("codigos.xlsx")

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[1])
rangosv <- as.data.frame(rangosv)
rangosv
##   Código Variable Rango Inferior Superior Descripción
## 1      1    Salud     1       24      500    24 - 500
## 2      1    Salud     2      500     1000  500 - 1000
## 3      1    Salud     3     1000     2000 1000 - 2000
## 4      1    Salud     4     2000     4000 2000 - 4000
## 5      1    Salud     5     4000     6000 4000 - 6000
## 6      1    Salud     6     6000     6000       >6000

Carabineros

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[2])
rangosv <- as.data.frame(rangosv)
Carabineros <- rangosv
Carabineros
##   Código    Variable Rango Inferior Superior  Descripción
## 1      2 Carabineros     1       17      500     18 - 500
## 2      2 Carabineros     2      500     1000   500 - 1000
## 3      2 Carabineros     3     1000     2000  1000 - 2000
## 4      2 Carabineros     4     2000     5000  2000 - 5000
## 5      2 Carabineros     5     5000    10000 5000 - 10000
## 6      2 Carabineros     6    10000    10000       >10000

Parvularia

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[3])
rangosv <- as.data.frame(rangosv)
Parvularia <- rangosv
Parvularia
##   Código   Variable Rango Inferior Superior Descripción
## 1      3 Parvularia     1       12      100    12 - 100
## 2      3 Parvularia     2      100      250   100 - 250
## 3      3 Parvularia     3      250      500   250 - 500
## 4      3 Parvularia     4      500     1000  500 - 1000
## 5      3 Parvularia     5     1000     5000  1000 -5000
## 6      3 Parvularia     6     5000       NA       >5000

EducaciónSuperior

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[4])
rangosv <- as.data.frame(rangosv)
EducaciónSuperior <- rangosv
EducaciónSuperior
##   Código          Variable Rango Inferior Superior   Descripción
## 1      4 Eduación Superior     1       17     1000     17 - 1000
## 2      4 Eduación Superior     2     1000     2500   1000 - 2500
## 3      4 Eduación Superior     3     2500    10000  2500 - 10000
## 4      4 Eduación Superior     4    10000    35000 10000 - 35000
## 5      4 Eduación Superior     5    35000    75000 35000 - 75000
## 6      4 Eduación Superior     6    75000    75000        >75000

Educacion_Basica_y_Media

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[5])
rangosv <- as.data.frame(rangosv)
Educacion_Basica_y_Media <- rangosv
Educacion_Basica_y_Media
##   Código                 Variable Rango Inferior Superior Descripción
## 1      5 Educación Básica y Media     1       14      100    14 - 100
## 2      5 Educación Básica y Media     2      100      250    100 -250
## 3      5 Educación Básica y Media     3      250      500   250 - 500
## 4      5 Educación Básica y Media     4      500     1000  500 - 1000
## 5      5 Educación Básica y Media     5     1000     2000 1000 - 2000
## 6      5 Educación Básica y Media     6     2000     2000       >2000

SdeI_Turistico

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[6])
rangosv <- as.data.frame(rangosv)
SdeI_Turistico <- rangosv
SdeI_Turistico
##   Código                   Variable Rango Inferior Superior  Descripción
## 1      6 Sitio de Interés Turístico     1       15      500      15 -500
## 2      6 Sitio de Interés Turístico     2      500     1000   500 - 1000
## 3      6 Sitio de Interés Turístico     3     1000     3000  1000 - 3000
## 4      6 Sitio de Interés Turístico     4     3000     6000  3000 - 6000
## 5      6 Sitio de Interés Turístico     5     6000    15000 6000 - 15000
## 6      6 Sitio de Interés Turístico     6    15000    15000       >15000

Monumento_Nacional

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[7])
rangosv <- as.data.frame(rangosv)
Monumento_Nacional <- rangosv
Monumento_Nacional
##   Código           Variable Rango Inferior Superior   Descripción
## 1      7 Monumento Nacional     1       14     2500     14 - 2500
## 2      7 Monumento Nacional     2     2500    10000  2500 - 10000
## 3      7 Monumento Nacional     3    10000    20000 10000 - 20000
## 4      7 Monumento Nacional     4    20000    30000 20000 - 30000
## 5      7 Monumento Nacional     5    30000    50000 30000 - 50000
## 6      7 Monumento Nacional     6   107026   107026       >107026

SdeInteresPoblacional

variables <- unique(rangos$Variable)
rangosv <- filter(rangos, Variable == variables[8])
rangosv <- as.data.frame(rangosv)
SdeInteresPoblacional <- rangosv
SdeInteresPoblacional
##   Código                      Variable Rango Inferior Superior Descripción
## 1      8 Sitios de Interés Poblacional     1        8      250     8 - 250
## 2      8 Sitios de Interés Poblacional     2      250      750   250 - 750
## 3      8 Sitios de Interés Poblacional     3      750     1500  750 - 1500
## 4      8 Sitios de Interés Poblacional     4     1500     5000 1500 - 5000
## 5      8 Sitios de Interés Poblacional     5     5000    10000 5000 - 5000
## 6      8 Sitios de Interés Poblacional     6    24588    24588      >24588

3 Distancia a centros de salud.

De nuestro dataframe original extraemos los campos que nos interesan: COD_ZonLoc, COD_MzEnt y 1_MEAN. El objetivo será construir dos columnas más: una con el código respectivo y otro con el rango al que pertenece ese código:

63: COD_ZonLoc
64: COD_MzEnt
103: 1_MEAN

Queda de la siguiente forma:

mean_rango <- bd_manzanas[,c(63,64,103,111,119,127,71,79,87,95),drop=FALSE]  # still a data.frame
head(mean_rango)
## # A tibble: 6 x 10
##   COD_ZonLoc COD_MzEnt  `1_MEAN`  `2_MEAN`  `3_MEAN`  `4_MEAN` `5_MEAN` `6_MEAN`
##   <chr>      <chr>      <chr>     <chr>     <chr>     <chr>    <chr>    <chr>   
## 1 3101061006 310106100~ 668.5670~ 731.7448~ 435.1309~ 653.077~ 326.414~ 712.951~
## 2 3101071001 310107100~ 393.1762~ 904.1413~ 309.6657~ 651.223~ 304.266~ 483.336~
## 3 3101021001 310102100~ 97.40482~ 389.5670~ 236.4910~ 423.627~ 178.536~ 312.308~
## 4 3101071001 310107100~ 441.9268~ 942.6537~ 357.9010~ 636.275~ 351.860~ 517.130~
## 5 3101071001 310107100~ 517.4833~ 874.0597~ 408.4091~ 623.498~ 403.196~ 575.439~
## 6 3101071001 310107100~ 318.2915~ 829.8747~ 233.6168~ 664.453~ 228.949~ 425.348~
## # ... with 2 more variables: 7_MEAN <chr>, 8_MEAN <chr>
mean_rango$`1_MEAN` <-  as.numeric(mean_rango$`1_MEAN`)
head(mean_rango)
## # A tibble: 6 x 10
##   COD_ZonLoc COD_MzEnt     `1_MEAN` `2_MEAN` `3_MEAN` `4_MEAN` `5_MEAN` `6_MEAN`
##   <chr>      <chr>            <dbl> <chr>    <chr>    <chr>    <chr>    <chr>   
## 1 3101061006 3101061006028    669.  731.744~ 435.130~ 653.077~ 326.414~ 712.951~
## 2 3101071001 3101071001500    393.  904.141~ 309.665~ 651.223~ 304.266~ 483.336~
## 3 3101021001 3101021001008     97.4 389.567~ 236.491~ 423.627~ 178.536~ 312.308~
## 4 3101071001 3101071001024    442.  942.653~ 357.901~ 636.275~ 351.860~ 517.130~
## 5 3101071001 3101071001004    517.  874.059~ 408.409~ 623.498~ 403.196~ 575.439~
## 6 3101071001 3101071001026    318.  829.874~ 233.616~ 664.453~ 228.949~ 425.348~
## # ... with 2 more variables: 7_MEAN <chr>, 8_MEAN <chr>

3.0.1 3101061006

la zona 3101061006 contiene data con rangos con 1_MEAN 2, así que subseteemos por esa zona, verificamos y asignamos el requerimiento:

mean_rango_3101061006 <- mean_rango[mean_rango$COD_ZonLoc == 3101061006,]
mean_rango_3101061006
## # A tibble: 29 x 10
##    COD_ZonLoc COD_MzEnt  `1_MEAN` `2_MEAN`  `3_MEAN`  `4_MEAN` `5_MEAN` `6_MEAN`
##    <chr>      <chr>         <dbl> <chr>     <chr>     <chr>    <chr>    <chr>   
##  1 3101061006 310106100~     669. 731.7448~ 435.1309~ 653.077~ 326.414~ 712.951~
##  2 3101061006 310106100~     621. 769.5996~ 412.7816~ 620.796~ 331.392~ 661.430~
##  3 3101061006 310106100~     732. 702.0938~ 113.9398~ 1096.36~ 176.044~ 1153.73~
##  4 3101061006 310106100~     630. 866.7491~ 246.9169~ 917.413~ 242.548~ 850.907~
##  5 3101061006 310106100~     700. 673.8950~ 237.1918~ 881.953~ 251.905~ 942.541~
##  6 3101061006 310106100~     706. 676.9712~ 118.6403~ 1040.55~ 185.262~ 1106.04~
##  7 3101061006 310106100~     559. 531.1021~ 125.9111~ 949.447~ 240.797~ 1095.65~
##  8 3101061006 310106100~     696. 666.8235~ 145.2801~ 990.617~ 195.777~ 1055.64~
##  9 3101061006 310106100~     747. 739.3347~ 218.8915~ 897.879~ 215.527~ 920.622~
## 10 3101061006 310106100~     732. 758.6476~ 272.1932~ 844.517~ 267.190~ 852.921~
## # ... with 19 more rows, and 2 more variables: 7_MEAN <chr>, 8_MEAN <chr>
if(mean_rango_3101061006$`1_MEAN` >= rangosv$Inferior[2] & mean_rango_3101061006$`1_MEAN` <= rangosv$Superior[2]) {
    mean_rango_3101061006$Categoría_salud <- 2
    mean_rango_3101061006$Rango_salud <- "500 - 1000"
}
mean_rango_3101061006
## # A tibble: 29 x 12
##    COD_ZonLoc COD_MzEnt  `1_MEAN` `2_MEAN`  `3_MEAN`  `4_MEAN` `5_MEAN` `6_MEAN`
##    <chr>      <chr>         <dbl> <chr>     <chr>     <chr>    <chr>    <chr>   
##  1 3101061006 310106100~     669. 731.7448~ 435.1309~ 653.077~ 326.414~ 712.951~
##  2 3101061006 310106100~     621. 769.5996~ 412.7816~ 620.796~ 331.392~ 661.430~
##  3 3101061006 310106100~     732. 702.0938~ 113.9398~ 1096.36~ 176.044~ 1153.73~
##  4 3101061006 310106100~     630. 866.7491~ 246.9169~ 917.413~ 242.548~ 850.907~
##  5 3101061006 310106100~     700. 673.8950~ 237.1918~ 881.953~ 251.905~ 942.541~
##  6 3101061006 310106100~     706. 676.9712~ 118.6403~ 1040.55~ 185.262~ 1106.04~
##  7 3101061006 310106100~     559. 531.1021~ 125.9111~ 949.447~ 240.797~ 1095.65~
##  8 3101061006 310106100~     696. 666.8235~ 145.2801~ 990.617~ 195.777~ 1055.64~
##  9 3101061006 310106100~     747. 739.3347~ 218.8915~ 897.879~ 215.527~ 920.622~
## 10 3101061006 310106100~     732. 758.6476~ 272.1932~ 844.517~ 267.190~ 852.921~
## # ... with 19 more rows, and 4 more variables: 7_MEAN <chr>, 8_MEAN <chr>,
## #   Categoría_salud <dbl>, Rango_salud <chr>

3.0.2 3101021001

la zona 3101021001 contiene data con rangos con 1_MEAN 1, así que subseteemos por esa zona y verificamos:

mean_rango_3101021001 <- mean_rango[mean_rango$COD_ZonLoc == 3101021001,]
mean_rango_3101021001
## # A tibble: 11 x 10
##    COD_ZonLoc COD_MzEnt  `1_MEAN` `2_MEAN`  `3_MEAN`  `4_MEAN` `5_MEAN` `6_MEAN`
##    <chr>      <chr>         <dbl> <chr>     <chr>     <chr>    <chr>    <chr>   
##  1 3101021001 310102100~     97.4 389.5670~ 236.4910~ 423.627~ 178.536~ 312.308~
##  2 3101021001 310102100~     77.4 136.3358~ 407.7918~ 203.841~ 309.149~ 272.365~
##  3 3101021001 310102100~     84.0 260.6958~ 287.5810~ 333.062~ 237.689~ 371.348~
##  4 3101021001 310102100~    216.  493.5875~ 168.4470~ 553.413~ 102.485~ 183.466~
##  5 3101021001 310102100~     41.2 504.2948~ 320.8755~ 442.053~ 79.8555~ 449.174~
##  6 3101021001 310102100~    153.  596.4230~ 278.0389~ 555.632~ 78.9346~ 549.445~
##  7 3101021001 310102100~     86.2 353.1465~ 353.4061~ 309.676~ 178.332~ 343.830~
##  8 3101021001 310102100~     86.6 566.4560~ 91.36149~ 574.913~ 87.3744~ 291.480~
##  9 3101021001 310102100~     95.7 226.6768~ 399.1003~ 220.393~ 286.214~ 289.462~
## 10 3101021001 310102100~    102.  414.0591~ 236.0573~ 400.891~ 212.764~ 427.189~
## 11 3101021001 310102100~    172.  618.2527~ 167.9329~ 611.413~ 113.618~ 352.403~
## # ... with 2 more variables: 7_MEAN <chr>, 8_MEAN <chr>
if(mean_rango_3101021001$`1_MEAN` >= rangosv$Inferior[1] & mean_rango_3101021001$`1_MEAN` <= rangosv$Superior[1]) {
    mean_rango_3101021001$Categoría_salud <- 1
    mean_rango_3101021001$Rango_salud <- "24 - 500"
}
mean_rango_3101021001
## # A tibble: 11 x 12
##    COD_ZonLoc COD_MzEnt  `1_MEAN` `2_MEAN`  `3_MEAN`  `4_MEAN` `5_MEAN` `6_MEAN`
##    <chr>      <chr>         <dbl> <chr>     <chr>     <chr>    <chr>    <chr>   
##  1 3101021001 310102100~     97.4 389.5670~ 236.4910~ 423.627~ 178.536~ 312.308~
##  2 3101021001 310102100~     77.4 136.3358~ 407.7918~ 203.841~ 309.149~ 272.365~
##  3 3101021001 310102100~     84.0 260.6958~ 287.5810~ 333.062~ 237.689~ 371.348~
##  4 3101021001 310102100~    216.  493.5875~ 168.4470~ 553.413~ 102.485~ 183.466~
##  5 3101021001 310102100~     41.2 504.2948~ 320.8755~ 442.053~ 79.8555~ 449.174~
##  6 3101021001 310102100~    153.  596.4230~ 278.0389~ 555.632~ 78.9346~ 549.445~
##  7 3101021001 310102100~     86.2 353.1465~ 353.4061~ 309.676~ 178.332~ 343.830~
##  8 3101021001 310102100~     86.6 566.4560~ 91.36149~ 574.913~ 87.3744~ 291.480~
##  9 3101021001 310102100~     95.7 226.6768~ 399.1003~ 220.393~ 286.214~ 289.462~
## 10 3101021001 310102100~    102.  414.0591~ 236.0573~ 400.891~ 212.764~ 427.189~
## 11 3101021001 310102100~    172.  618.2527~ 167.9329~ 611.413~ 113.618~ 352.403~
## # ... with 4 more variables: 7_MEAN <chr>, 8_MEAN <chr>, Categoría_salud <dbl>,
## #   Rango_salud <chr>

3.1 Generalizacion

mean_rango <- bd_manzanas[,c(63,64,103,111,119,127,71,79,87,95),drop=FALSE]  # still a data.frame
mean_rango$`1_MEAN` <-  as.numeric(mean_rango$`1_MEAN`)
mean_rango$`2_MEAN` <-  as.numeric(mean_rango$`2_MEAN`)
mean_rango$`3_MEAN` <-  as.numeric(mean_rango$`3_MEAN`)
mean_rango$`4_MEAN` <-  as.numeric(mean_rango$`4_MEAN`)
mean_rango$`5_MEAN` <-  as.numeric(mean_rango$`5_MEAN`)
mean_rango$`6_MEAN` <-  as.numeric(mean_rango$`6_MEAN`)
mean_rango$`7_MEAN` <-  as.numeric(mean_rango$`7_MEAN`)
mean_rango$`8_MEAN` <-  as.numeric(mean_rango$`8_MEAN`)

colnames(mean_rango)[3] <- "Salud"
colnames(mean_rango)[4] <- "Carabineros"
colnames(mean_rango)[5] <- "Parvularia"
colnames(mean_rango)[6] <- "EducaciónSuperior"
colnames(mean_rango)[7] <- "Educacion_Basica_y_Media"
colnames(mean_rango)[8] <- "SdeI_Turistico"
colnames(mean_rango)[9] <- "Monumento_Nacional"
colnames(mean_rango)[10] <- "SdeInteresPoblacional"
head(mean_rango)
## # A tibble: 6 x 10
##   COD_ZonLoc COD_MzEnt     Salud Carabineros Parvularia EducaciónSuperior
##   <chr>      <chr>         <dbl>       <dbl>      <dbl>             <dbl>
## 1 3101061006 3101061006028 669.         732.       435.              653.
## 2 3101071001 3101071001500 393.         904.       310.              651.
## 3 3101021001 3101021001008  97.4        390.       236.              424.
## 4 3101071001 3101071001024 442.         943.       358.              636.
## 5 3101071001 3101071001004 517.         874.       408.              623.
## 6 3101071001 3101071001026 318.         830.       234.              664.
## # ... with 4 more variables: Educacion_Basica_y_Media <dbl>,
## #   SdeI_Turistico <dbl>, Monumento_Nacional <dbl>, SdeInteresPoblacional <dbl>
# ifelse(mean_rango$`1_MEAN` >= 500 & mean_rango$`1_MEAN` <= 1000,mean_rango$Categoría_salud <- 2, ifelse(mean_rango$`1_MEAN` >= 24 & mean_rango$`1_MEAN` <= 500,mean_rango$Categoría_salud <- 1,mean_rango$Categoría_salud <- 3))
mean_rango <- mean_rango %>% mutate(Categoría_Salud =
case_when(Salud >= 24 & Salud <= 500 ~ "1",
Salud > 500 & Salud <= 1000 ~ "2",
Salud > 1000 & Salud <= 2000 ~ "3",
Salud > 2000 & Salud <= 4000 ~ "4",
Salud > 4000 & Salud <= 6000 ~ "5",
Salud > 6000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_Salud =
case_when(Salud >= 24 & Salud <= 500 ~ "24 - 500",
Salud > 500 & Salud <= 1000 ~ "500 - 1000",
Salud > 1000 & Salud <= 2000 ~ "1000 - 2000",
Salud > 2000 & Salud <= 4000 ~ "2000 - 4000",
Salud > 4000 & Salud <= 6000 ~ "4000 - 6000",
Salud > 6000 ~ ">6000"
)
)






mean_rango <- mean_rango %>% mutate(Categoría_Carabineros =
case_when(Carabineros >= 17 & Carabineros <= 500 ~ "1",
Carabineros > 500 & Carabineros <= 1000 ~ "2",
Carabineros > 1000 & Carabineros <= 2000 ~ "3",
Carabineros > 2000 & Carabineros <= 5000 ~ "4",
Carabineros > 5000 & Carabineros <= 10000 ~ "5",
Carabineros > 10000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_Carabineros =
case_when(Carabineros >= 17 & Carabineros <= 500 ~ "18 - 500",
Carabineros > 500 & Carabineros <= 1000 ~ "500 - 1000",
Carabineros > 1000 & Carabineros <= 2000 ~ "1000 - 2000",
Carabineros > 2000 & Carabineros <= 4000 ~ "2000 - 5000",
Carabineros > 5000 & Carabineros <= 6000 ~ "5000 - 10000",
Carabineros > 10000 ~ ">10000"
)
)






mean_rango <- mean_rango %>% mutate(Categoría_Parvularia =
case_when(Parvularia >= 12 & Parvularia <= 100 ~ "1",
Parvularia > 100 & Parvularia <= 250 ~ "2",
Parvularia > 250 & Parvularia <= 500 ~ "3",
Parvularia > 500 & Parvularia <= 1000 ~ "4",
Parvularia > 1000 & Parvularia <= 5000 ~ "5",
Parvularia > 5000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_Parvularia =
case_when(Parvularia >= 12 & Parvularia <= 100 ~ "12 - 100",
Parvularia > 100 & Parvularia <= 250 ~ "100 - 250",
Parvularia > 250 & Parvularia <= 500 ~ "250 - 500",
Parvularia > 500 & Parvularia <= 1000 ~ "500 - 1000",
Parvularia > 1000 & Parvularia <= 5000 ~ "1000 -5000",
Parvularia > 5000 ~ ">5000"
)
)









mean_rango <- mean_rango %>% mutate(Categoría_EducaciónSuperior =
case_when(EducaciónSuperior >= 17 & EducaciónSuperior <= 1000 ~ "1",
EducaciónSuperior > 1000 & EducaciónSuperior <= 2500 ~ "2",
EducaciónSuperior > 2500 & EducaciónSuperior <= 10000 ~ "3",
EducaciónSuperior > 10000 & EducaciónSuperior <= 35000 ~ "4",
EducaciónSuperior > 35000 & EducaciónSuperior <= 75000 ~ "5",
EducaciónSuperior > 75000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_EducaciónSuperior =
case_when(EducaciónSuperior >= 17 & EducaciónSuperior <= 1000 ~ "17 - 1000",
EducaciónSuperior > 1000 & EducaciónSuperior <= 2500 ~ "1000 - 2500",
EducaciónSuperior > 2500 & EducaciónSuperior <= 10000 ~ "2500 - 10000",
EducaciónSuperior > 10000 & EducaciónSuperior <= 35000 ~ "10000 - 35000",
EducaciónSuperior > 35000 & EducaciónSuperior <= 75000 ~ "35000 - 75000",
EducaciónSuperior > 75000 ~ ">75000"
)
)










mean_rango <- mean_rango %>% mutate(Categoría_Educacion_Basica_y_Media =
case_when(Educacion_Basica_y_Media >= 14 & Educacion_Basica_y_Media <= 100 ~ "1",
Educacion_Basica_y_Media > 100 & Educacion_Basica_y_Media <= 250 ~ "2",
Educacion_Basica_y_Media > 250 & Educacion_Basica_y_Media <= 500 ~ "3",
Educacion_Basica_y_Media > 500 & Educacion_Basica_y_Media <= 1000 ~ "4",
Educacion_Basica_y_Media > 1000 & Educacion_Basica_y_Media <= 2000 ~ "5",
Educacion_Basica_y_Media > 2000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_Educacion_Basica_y_Media =
case_when(Educacion_Basica_y_Media >= 14 & Educacion_Basica_y_Media <= 100 ~ "14 - 100",
Educacion_Basica_y_Media > 100 & Educacion_Basica_y_Media <= 250 ~ "100 -250",
Educacion_Basica_y_Media > 250 & Educacion_Basica_y_Media <= 500 ~ "250 - 500",
Educacion_Basica_y_Media > 500 & Educacion_Basica_y_Media <= 1000 ~ "500 - 1000",
Educacion_Basica_y_Media > 1000 & Educacion_Basica_y_Media <= 2000 ~ "1000 - 2000",
Educacion_Basica_y_Media > 2000 ~ ">2000"
)
)







mean_rango <- mean_rango %>% mutate(Categoría_SdeI_Turistico =
case_when(SdeI_Turistico >= 15 & SdeI_Turistico <= 500 ~ "1",
SdeI_Turistico > 500 & SdeI_Turistico <= 1000 ~ "2",
SdeI_Turistico > 1000 & SdeI_Turistico <= 3000 ~ "3",
SdeI_Turistico > 3000 & SdeI_Turistico <= 6000 ~ "4",
SdeI_Turistico > 6000 & SdeI_Turistico <= 15000 ~ "5",
SdeI_Turistico > 15000 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_SdeI_Turistico =
case_when(SdeI_Turistico >= 15 & SdeI_Turistico <= 500 ~ "15 -500",
SdeI_Turistico > 500 & SdeI_Turistico <= 1000 ~ "500 - 1000",
SdeI_Turistico > 1000 & SdeI_Turistico <= 3000 ~ "1000 - 3000",
SdeI_Turistico > 3000 & SdeI_Turistico <= 6000 ~ "3000 - 6000",
SdeI_Turistico > 6000 & SdeI_Turistico <= 15000 ~ "6000 - 15000",
SdeI_Turistico > 15000 ~ ">15000"
)
)









mean_rango <- mean_rango %>% mutate(Categoría_Monumento_Nacional =
case_when(Monumento_Nacional >= 14 & Monumento_Nacional <= 2500 ~ "1",
Monumento_Nacional > 2500 & Monumento_Nacional <= 10000 ~ "2",
Monumento_Nacional > 10000 & Monumento_Nacional <= 20000 ~ "3",
Monumento_Nacional > 20000 & Monumento_Nacional <= 30000 ~ "4",
Monumento_Nacional > 30000 & Monumento_Nacional <= 50000 ~ "5",
Monumento_Nacional > 107026 ~ "6"
)
)
mean_rango <- mean_rango %>% mutate(Descripción_Monumento_Nacional =
case_when(Monumento_Nacional >= 14 & Monumento_Nacional <= 2500 ~ "14 - 2500",
Monumento_Nacional > 2500 & Monumento_Nacional <= 10000 ~ "2500 - 10000",
Monumento_Nacional > 10000 & Monumento_Nacional <= 20000 ~ "10000 - 20000",
Monumento_Nacional > 20000 & Monumento_Nacional <= 30000 ~ "20000 - 30000",
Monumento_Nacional > 30000 & Monumento_Nacional <= 50000 ~ "30000 - 50000",
Monumento_Nacional > 107026 ~ ">107026"
)
)








mean_rango <- mean_rango %>% mutate(Categoría_SdeInteresPoblacional =
case_when(SdeInteresPoblacional >= 8 & SdeInteresPoblacional <= 250 ~ "1",
SdeInteresPoblacional > 250 & SdeInteresPoblacional <= 750 ~ "2",
SdeInteresPoblacional > 750 & SdeInteresPoblacional <= 1500 ~ "3",
SdeInteresPoblacional > 1500 & SdeInteresPoblacional <= 5000 ~ "4",
SdeInteresPoblacional > 5000 & SdeInteresPoblacional <= 10000 ~ "5",
SdeInteresPoblacional > 24588 ~ "6"
)
)

mean_rango <- mean_rango %>% mutate(Descripción_SdeInteresPoblacional =
case_when(SdeInteresPoblacional >= 8 & SdeInteresPoblacional <= 250 ~ "8 - 250",
SdeInteresPoblacional > 250 & SdeInteresPoblacional <= 750 ~ "250 - 750",
SdeInteresPoblacional > 750 & SdeInteresPoblacional <= 1500 ~ "750 - 1500",
SdeInteresPoblacional > 1500 & SdeInteresPoblacional <= 5000 ~ "1500 - 5000",
SdeInteresPoblacional > 5000 & SdeInteresPoblacional <= 10000 ~ "5000 - 5000",
SdeInteresPoblacional > 24588 ~ ">24588
"
)
)
head(mean_rango)
## # A tibble: 6 x 26
##   COD_ZonLoc COD_MzEnt     Salud Carabineros Parvularia EducaciónSuperior
##   <chr>      <chr>         <dbl>       <dbl>      <dbl>             <dbl>
## 1 3101061006 3101061006028 669.         732.       435.              653.
## 2 3101071001 3101071001500 393.         904.       310.              651.
## 3 3101021001 3101021001008  97.4        390.       236.              424.
## 4 3101071001 3101071001024 442.         943.       358.              636.
## 5 3101071001 3101071001004 517.         874.       408.              623.
## 6 3101071001 3101071001026 318.         830.       234.              664.
## # ... with 20 more variables: Educacion_Basica_y_Media <dbl>,
## #   SdeI_Turistico <dbl>, Monumento_Nacional <dbl>,
## #   SdeInteresPoblacional <dbl>, Categoría_Salud <chr>,
## #   Descripción_Salud <chr>, Categoría_Carabineros <chr>,
## #   Descripción_Carabineros <chr>, Categoría_Parvularia <chr>,
## #   Descripción_Parvularia <chr>, Categoría_EducaciónSuperior <chr>,
## #   Descripción_EducaciónSuperior <chr>, ...
# writexl::write_xlsx(mean_rango,"rangos.xlsx")

Veamos los primeros 1000 registros

56+ 124 +354+   20
## [1] 554

3.2 union de las tablas