# {territorial}: un paquete de R para trabajar con datos de comunas y regiones de Chile

_Herramientas para facilitar el procesamiento y limpieza de datos terrioriales de Chile con R_

> Este paquete de R busca facilitar tareas de limpieza que suelen ser necesarias al trabajar con datos de Chile a nivel comunal y regional, ofreciendo funciones para hacer cosas como validar y limpiar las comunas, agregar variables territoriales, ordenar las regiones de Chile de norte a sur, y más!

- URL: https://bastianolea.rbind.io/blog/territorial/
- Fecha: 2026-09-28
- Autor: Bastián Olea Herrera
- Etiquetas: Chile, limpieza de datos, paquetes
- Recursos: [Sitio del paquete](https://bastianolea.github.io/territorial/articles/territorial.html) [Funciones](https://bastianolea.github.io/territorial/reference/index.html)

---

<a href="https://bastianolea.github.io/territorial/">![](https://bastianolea.rbind.io/blog/territorial/hex-featured.png)</a>

Los datos públicos sobre temáticas sociales siempre vienen en dudosa calidad, sobre todo cuando se refieren a comunas: nombres mal escritos, en mayúsculas, sin eñes, sin tildes, etc. Así que creé `{territorial}` para facilitar este tipo de tareas!

El objetivo de este paquete es simplificar el análisis de datos territoriales de Chile, facilitando tareas de limpieza y procesamiento de datos que suelen ser necesarias al trabajar con datos de Chile a nivel comunal y regional. Para ello, [este paquete ofrece numerosas funciones](https://bastianolea.github.io/territorial/reference/index.html) de limpieza de datos para las tareas más frecuentes:

Por ejemplo:

- **Revisar** si los nombres de comunas y regiones vienen bien escritos (`validar_comunas()` y `validar_regiones()`)
- **Limpiar** los nombres de las comunas automáticamente con `limpiar_comunas()`, incluso si vienen con faltas de ortografía o mal escritas!
- Convertir nombres de comunas a [códigos únicos territoriales](https://bastianolea.github.io/territorial/articles/codigos_unicos_territoriales.html) (`as_codigo_comuna()`) y viceversa (`as_nombre_comuna()`), para facilitar el cruce con otras fuentes de datos
- **Ordenar las regiones** del país de norte a sur (`ordenar_regiones()`)
- Si tienes los nombres o códigos de comuna, con `contextualizar()` puedes agregar todos los datos territoriales faltantes (regiones y provincias con sus códigos únicos) a partir de las comunas
- Redactar los nombres de las regiones (`redactar_region()`) para que, por ejemplo, "Maule" sea "Región *del* Maule"
- Clasificar las comunas de Chile en **urbanas, mixtas** y **rurales** con `agregar_clasificacion()`
- [Clasificar las regiones de Chile en **macrozonas**](https://bastianolea.github.io/territorial/articles/mapas_regionales_macrozonas.html) con `agregar_macrozona()`
- **Abreviar** las comunas de Chile a siglas de tres caracteres con `abreviar_comunas()`
- y más!

[Revisa la viñeta](https://bastianolea.github.io/territorial/articles/territorial.html) `vignette("territorial")` para una introducción!

**[Paquete `{territorial}`](https://bastianolea.github.io/territorial/articles/territorial.html)**: Herramientas para facilitar el procesamiento de datos de comunas y regiones de Chile con R, ofreciendo funciones para validación de comunas, limpiar nombres de comunas, ordenar regiones, y más.

[Revisa la viñeta](https://bastianolea.github.io/territorial/articles/territorial.html) `vignette("territorial")` para una introducción al paquete!

## Instalación

Puedes instalar la versión de desarrollo este paquete desde GitHub:

``` r
# install.packages("pak")
pak::pak("bastianolea/territorial")
```

## Usando `{territorial}`

Como su nombre lo dice, `{territorial}` entrega herramientas para trabajar con datos territoriales de Chile, entendidos como datos tabulares cuyas observaciones correspondan a comunas o regiones del país.

``` r
library(territorial)
```

La premisa del paquete es que tenemos una tabla (`territorial::territorios`) que contiene los nombres oficiales y los códigos únicos territoriales de todas las regiones, provincias y comunas de Chile. Usando esta tabla como fuente de verdad, podemos validar, corregir y complementar datos territoriales.

También se plantea el estándar de llamar las columnas como `nombre_{x}` y `codigo_{x}` (por ejemplo, `nombre_comuna` y `codigo_comuna`), para mantener orden y compatibilidad entre tablas, aunque esto es opcional.

Probemos `{territorial}` con una tabla con datos de ejemplo:

``` r
# crear una tabla con datos de ejemplo
datos <- dplyr::tibble(
  nombre_comuna = c("PIRQUE", "El Monte", "Maipu", "nunoa",
                    "La calera", "prohibidencia", "Penialolen",
                    "CERRILLOS", "San José De Maipo", "OHiggins"))

datos
```

    # A tibble: 10 × 1
       nombre_comuna    
       <chr>            
     1 PIRQUE           
     2 El Monte         
     3 Maipu            
     4 nunoa            
     5 La calera        
     6 prohibidencia    
     7 Penialolen       
     8 CERRILLOS        
     9 San José De Maipo
    10 OHiggins         

Estas comunas vienen en mayúsculas, con faltas de ortografía, y mal escritas!

Podemos **revisar la calidad** de los nombres de las comunas con `validar_comunas()`, para detectar posibles problemas:

``` r
datos |> 
  validar_comunas(nombre_comuna) # cuando la columna con nombres de comunas se llama `nombre_comuna`, no es necesario especificarla
```

    ! Resumen: 9 casos de comunas que no conciden con comunas correctamente escritas (ver `territorial::comunas()`): PIRQUE, Maipu, nunoa, La calera, prohibidencia, Penialolen, CERRILLOS, San José De Maipo y OHiggins

    ! Mayúsculas: 2 casos de comunas escritas en mayúsculas: PIRQUE y CERRILLOS

    ! Minúsculas: 2 casos de comunas escritas en minúsculas: nunoa y prohibidencia

    ! Mayúsculas: 1 caso de comunas con preposiciones ('de', 'del') escritas en mayúsculas: San José De Maipo

    ℹ Tildes: 1 caso de comunas que deberían tener tildes y no los tienen: Maipu

    ℹ Eñes: 1 caso de comunas escritas sin eñe: nunoa

    ℹ Problemas comunes: 1 caso de comunas popularmente mal escritas: OHiggins

    ✖ Validación de comunas: se encontraron 17 problemas con las comunas! Usa `territorial::limpiar_comunas()` para solucionarlos.

Ahora sabemos qué tipo de problemas vienen en los nombres de las comunas de nuestra tabla de datos.

Luego podemos limpiar automáticamente las comunas con `limpiar_comunas()`, y obtener una columna con las comunas correctamente escritas:

``` r
datos |> 
  limpiar_comunas(nombre_comuna)
```

    ℹ Limpiando 10 nombres de comunas (10 son distintas)

    → Paso 1: confirmar comunas correctas

    ℹ De las 10 comunas distintas, 1 ya eran correctas: El Monte

    → Paso 2: coincidencias por limpieza de texto

    ℹ A partir de la limpieza de texto, se limpiaron 7 de 10 comunas: Pirque, El Monte, Maipú, Ñuñoa, Cerrillos, San José de Maipo y O'Higgins

    → Paso 3: casos especiales

    ℹ Se encontró 1 caso especial: Calera

    → Paso 4: coincidencias aproximadas de texto

    ℹ Se limpiaron 2 de 2 comunas por medio de coincidencias aproximadas de texto: Providencia y Peñalolén

    → Conclusión de limpieza de comunas

    ✔ De las 10 comunas distintas, se limpiaron 10 en total (100%)

    # A tibble: 10 × 1
       nombre_comuna    
       <chr>            
     1 Pirque           
     2 El Monte         
     3 Maipú            
     4 Ñuñoa            
     5 Calera           
     6 Providencia      
     7 Peñalolén        
     8 Cerrillos        
     9 San José de Maipo
    10 O'Higgins        

Esta función usa varias técnicas para limpiar automáticamente los nombres de las comunas y municipios de Chile. Si encuentras casos que no se limpian bien, [escríbeme un *issue*.](https://github.com/bastianolea/territorial/issues/new)

Si tenemos una tabla que solamente tiene comunas, y necesitamos **agregar las variables territoriales faltantes** como región, provincia, y los [códigos únicos territoriales](https://bastianolea.github.io/territorial/articles/codigos_unicos_territoriales.html) de Chile (`vignette(codigos_unicos_territoriales)`), podemos usar `contextualizar()` para agregar automáticamente todas las columnas territoriales que falten.

``` r
datos <- dplyr::tribble(
  ~nombre_comuna, ~personas,
  "Puente Alto",    14,
  "La Florida",     23,
  "La Granja",      156,
  "San Joaquín",    12)
```

``` r
datos |>
  contextualizar(nombre_comuna)
```

    ℹ Columnas agregadas: codigo_region, nombre_region, codigo_provincia, nombre_provincia y codigo_comuna

    # A tibble: 4 × 7
      codigo_region nombre_region    codigo_provincia nombre_provincia codigo_comuna
              <dbl> <chr>                       <dbl> <chr>                    <dbl>
    1            13 Metropolitana d…              132 Cordillera               13201
    2            13 Metropolitana d…              131 Santiago                 13110
    3            13 Metropolitana d…              131 Santiago                 13111
    4            13 Metropolitana d…              131 Santiago                 13129
    # ℹ 2 more variables: nombre_comuna <chr>, personas <dbl>

Así, un dataframe que solamente tiene nombres de comuna o códigos únicos territoriales puede pasar a tener todas las demás variables que describen territorialmente a esos datos.

Esto es extremadamente útil para limpiar datos: solamente necesitas una tabla con códigos únicos territoriales para aplicarle `contextualizar()` y obtener la tabla completa.

Por ejemplo, la siguiente tabla:

``` r
datos <- dplyr::tribble(
     ~codigo_comuna, ~personas,
              13201,        14,
              13110,        23,
              13111,       156,
              13129,        12)
```

Ahora le aplicamos `contextualizar()` y obtenemos una tabla con todas las variables que describen cada territorio de manera homogénea y estandarizada:

``` r
datos |> 
  contextualizar(codigo_comuna)
```

    ℹ Columnas agregadas: codigo_region, nombre_region, codigo_provincia, nombre_provincia y nombre_comuna

    # A tibble: 4 × 7
      codigo_region nombre_region    codigo_provincia nombre_provincia codigo_comuna
              <dbl> <chr>                       <dbl> <chr>                    <dbl>
    1            13 Metropolitana d…              132 Cordillera               13201
    2            13 Metropolitana d…              131 Santiago                 13110
    3            13 Metropolitana d…              131 Santiago                 13111
    4            13 Metropolitana d…              131 Santiago                 13129
    # ℹ 2 more variables: nombre_comuna <chr>, personas <dbl>

------------------------------------------------------------------------

Estas son algunas de las funciones principales, pero existen muchas más que facilitan el trabajo con datos comunales y regionales de Chile: [revisa el índice](https://bastianolea.github.io/territorial/reference/index.html) para verlas todas, o [lee la viñeta](https://bastianolea.github.io/territorial/articles/territorial.html) para una guía de uso más completa.

## Ejemplos de uso

En el sitio de la documentación del paquete tengo varios ejemplos de usos de `{territorial}` con datos reales:

- [Ejemplo de limpieza de datos electorales (Servel)](https://bastianolea.github.io/territorial/articles/ejemplo_servel.html)
- [Ejemplo de limpieza de datos de uso de bibliotecas públicas en Chile](https://bastianolea.github.io/territorial/articles/ejemplo_bibliotecas.html)
- [Ejemplo de limpieza de datos de beneficiarios de programas de emprendimiento en Chile](https://bastianolea.github.io/territorial/articles/ejemplo_sercotec.html)

También hay un ejemplo ficticio de [limpieza de datos extremadamente sucios](https://bastianolea.github.io/territorial/articles/suciedad_extrema.html) y un par de tutoriales para usar `{territorial}` para facilitar la [creación de mapas comunales](https://bastianolea.github.io/territorial/articles/mapas_comunales.html) y [mapas regionales por macrozonas](https://bastianolea.github.io/territorial/articles/mapas_regionales_macrozonas.html).

------------------------------------------------------------------------

Paquete desarrollado bajo el [programa de Campeones de ROpenSci](https://ropensci.org/es/champions/), con el apoyo de mi mentora [Andrea Gómez Vargas](https://github.com/SoyAndrea).
