<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Limpieza de datos on Bastián Olea</title>
    <link>https://bastianolea.rbind.io/tags/limpieza-de-datos/</link>
    <description>Recent content in Limpieza de datos on Bastián Olea</description>
    <generator>Hugo</generator>
    <language>es-ES</language>
    <lastBuildDate>Sat, 27 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bastianolea.rbind.io/tags/limpieza-de-datos/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>`{territorial}`: un paquete de R para trabajar con datos de comunas y regiones de Chile</title>
      <link>https://bastianolea.rbind.io/blog/territorial/</link>
      <pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/territorial/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://bastianolea.github.io/territorial/&#34;&gt;&lt;img src=&#34;hex-featured.png&#34; align=&#34;right&#34; height=&#34;180&#34; alt=&#34;territorial website&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Este paquete busca facilitar tareas de limpieza que suelen ser&#xA;necesarias al trabajar con datos de Chile a nivel comunal y regional,&#xA;ofreciendo &#xA;&lt;a href=&#34;https://bastianolea.github.io/territorial/reference/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;numerosas funciones&lt;/a&gt; para tareas como:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Revisar si los nombres de comunas y regiones vienen bien escritos&#xA;(&lt;code&gt;validar_comunas()&lt;/code&gt; y &lt;code&gt;validar_regiones()&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Limpiar automáticamente los nombres de las comunas con&#xA;&lt;code&gt;limpiar_comunas()&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Agregar todos los datos territoriales (regiones y provincias con sus&#xA;códigos únicos) a partir de las comunas (&lt;code&gt;contextualizar()&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Convertir nombres de comunas a códigos únicos comunales&#xA;(&lt;code&gt;as_codigo_comuna()&lt;/code&gt;) y viceversa (&lt;code&gt;as_nombre_comuna()&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Ordenar las regiones del país de norte a sur (&lt;code&gt;ordenar_regiones()&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Redactar los nombres de las regiones (&lt;code&gt;redactar_region()&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;y más!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;El objetivo de este paquete es poder ayudar a todas las personas que trabajan datos territoriales de Chile a simplificar sus procesos de trabajo de análisis de datos con R.&lt;/p&gt;</description>
    </item>
    <item>
      <title>`{rutera}`: un paquete de R para limpiar y procesar RUTs chilenos</title>
      <link>https://bastianolea.rbind.io/blog/rutera/</link>
      <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/rutera/</guid>
      <description>&lt;p&gt;Paquete de R que entrega herramientas para limpiar, validar y verificar el número de cédula de identidad Chilena en R.&lt;/p&gt;&#xA;&lt;div style=&#34;margin: 28px 0;&#34;&gt;&#xA;&#xA;  &lt;a href=&#34;https://bastianolea.github.io/rutera/&#34;&#xA;     target=&#34;_blank&#34;&#xA;     rel=&#34;noopener noreferrer&#34;&#xA;     class=&#34;externo-card&#34;&gt;&#xA;&#xA;    &#xA;    &lt;figure class=&#34;externo-card-img paquete-card-img&#34;&gt;&#xA;      &lt;img src=&#34;hex-featured.png&#34;&#xA;           alt=&#34;Paquete `{rutera}`&#34;&gt;&#xA;    &lt;/figure&gt;&#xA;    &#xA;&#xA;    &lt;div class=&#34;externo-card-text&#34;&gt;&#xA;&#xA;      &lt;p style=&#34;margin: 0;&#xA;                font-size: 95%;&#xA;                color: #9069C0;&#xA;                font-weight: bold;&#xA;                line-height: 1.35;&#34;&gt;&#xA;        Paquete &lt;code&gt;{rutera}&lt;/code&gt;&#xA;      &lt;/p&gt;&#xA;&#xA;      &#xA;      &lt;p style=&#34;margin: 0;&#xA;                color: #543A73;&#xA;                font-size: 84%;&#xA;                line-height: 1.5;&#34;&gt;&#xA;        Herramientas para limpiar, validar y verificar el número de cédula de identidad Chilena en R. Estas funciones ayudan a realizar operaciones frecuentes para datos de ciudadanos chilenos que incluyen el RUT como identificador único.&#xA;      &lt;/p&gt;</description>
    </item>
    <item>
      <title>Recodificando variables ordinales cuando vienen sucias y/o desde respuestas abiertas</title>
      <link>https://bastianolea.rbind.io/blog/stringr_limpieza_ordinal/</link>
      <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/stringr_limpieza_ordinal/</guid>
      <description>&lt;p&gt;Las &lt;strong&gt;variables ordinales&lt;/strong&gt; son aquellas cuyos valores tienen un orden definido, pero la diferencia entre estos valores puede ser variable. Por ejemplo: &lt;em&gt;bajo, medio&lt;/em&gt; y &lt;em&gt;alto.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;En este caso me tocó enfrentarme a una encuesta con una variable ordinal que medía &lt;strong&gt;velocidad de internet&lt;/strong&gt;, que es por naturaleza una variable contínua (números que representan la velocidad), pero que en este caso fue categorizada en intervalos (pasando del valor &lt;code&gt;36&lt;/code&gt; a &amp;ldquo;Entre 20 y 50&amp;rdquo;, por ejemplo) transformándola en una variable ordinal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Búsquedas de texto por ranking de relevancia con R usando el algoritmo BM25</title>
      <link>https://bastianolea.rbind.io/blog/buscar_texto/</link>
      <pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/buscar_texto/</guid>
      <description>&lt;div style=&#34;display: flex; align-items: center; gap: 15px; padding: 14px; &#xA;            /*background-color: #A985C650;*/&#xA;            background-color: #DEC4F2;&#xA;            border-radius: 6px;&#xA;            margin: 20px 40px 20px 40px;&#34;&gt;&#xA;  &#xA;  &lt;div style=&#34;flex-shrink: 0;&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-info-circle&#34; style=&#34;font-size: 130%; margin-left: 2px; opacity: 1; color: #9069C0;&#34;&gt;&lt;/i&gt;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;aside style = &#34;font-size: 90%;&#34;&gt;&#xA;    Hice este post porque actualicé el &#xA;&lt;a href=&#34;https://bastianolea.rbind.io/blog/buscador/&#34;&gt;buscador de mi blog&lt;/a&gt; que puedes &#xA;&lt;a href=&#34;https://bastianolea.rbind.io/buscar/&#34;&gt;usar aquí&lt;/a&gt; para que ahora entregue mejores resultados, y lo mejor: ordenados por relevancia. Puedes ver su código &#xA;&lt;a href=&#34;https://github.com/bastianolea/blog_buscador&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;en este repositorio.&lt;/a&gt;&#xA;  &lt;/aside&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;p&gt;Cuando tenemos datos que contienen mucho texto, usualmente necesitamos filtrar las observaciones dependiendo de si contienen o no uno o más términos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Renombrar archivos desde R</title>
      <link>https://bastianolea.rbind.io/blog/2026-02-25/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2026-02-25/</guid>
      <description>&lt;p&gt;Una tarea común en al trabajar con datos (y también en la computación en general) es necesitar renombrar muchos archivos. R puede ayudarnos a realizar este tipo de tareas repetitivas, dado que, además de ser un lenguaje centrado en el análisis de datos, R también puede usarse para cualquier otro propósito!&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h2 id=&#34;inspeccionar-directorios-y-archivos-con-r&#34;&gt;Inspeccionar directorios y archivos con R&#xA;  &lt;a href=&#34;#inspeccionar-directorios-y-archivos-con-r&#34;&gt;&lt;svg class=&#34;anchor-symbol&#34; aria-hidden=&#34;true&#34; height=&#34;26&#34; width=&#34;26&#34; viewBox=&#34;0 0 22 22&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;      &lt;path d=&#34;M0 0h24v24H0z&#34; fill=&#34;currentColor&#34;&gt;&lt;/path&gt;&#xA;      &lt;path d=&#34;M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z&#34;&gt;&lt;/path&gt;&#xA;    &lt;/svg&gt;&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Hagamos como que tenemos una carpeta llena de archivos (pueden ser imágenes, documentos PDF, u otros documentos), en este caso la carpeta se llama &lt;code&gt;reportes&lt;/code&gt; y dentro tiene 10 documentos PDF.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cargar y unir datos de múltiples hojas de Excel con R</title>
      <link>https://bastianolea.rbind.io/blog/excel_unir_hojas/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/excel_unir_hojas/</guid>
      <description>&lt;p&gt;Las hojas de Excel pueden ser cómodas para organizar información, pero no mucho para procesarla o analizarla. Por lo mismo, una de las operaciones iniciales de limpieza de datos suele ser &lt;strong&gt;unir datos que vienen repartidos en varias hojas de Excel&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;En este tutorial vamos a ver cómo se hace paso a paso. Usaremos el paquete &lt;code&gt;{readxl}&lt;/code&gt; para leer los datos, &lt;code&gt;{dplyr}&lt;/code&gt; para manipular y combinar las hojas, y &lt;code&gt;{purrr}&lt;/code&gt; para realizar operaciones sobre todas las hojas de forma automática.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encuentra diferencias entre objetos de R con {waldo}</title>
      <link>https://bastianolea.rbind.io/blog/waldo/</link>
      <pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/waldo/</guid>
      <description>&lt;p&gt;&#xA;&lt;a href=&#34;https://waldo.r-lib.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;{waldo}&lt;/code&gt;&lt;/a&gt; es un paquete de R para encontrar diferencias entre objetos y conjuntos de datos.&lt;/p&gt;&#xA;&lt;p&gt;Creemos dos vectores de datos de ejemplo:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector_a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector_b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;f&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si los comparamos con la función &lt;code&gt;all.equal()&lt;/code&gt;, de R base, obtenemos un resultado poco informativo:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# comparar con base&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;all.equal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector_a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector_b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;[1] &amp;quot;Lengths (5, 4) differ (string compare on first 4)&amp;quot;&#xA;[2] &amp;quot;1 string mismatch&amp;quot;                                &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Básicamente nos dice &amp;ldquo;son distintos&amp;rdquo; 🤨&lt;/p&gt;&#xA;&lt;p&gt;Pero si usamos &lt;code&gt;waldo::compare()&lt;/code&gt;, obtenemos una comparación ordenada y clara de las diferencias:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contar datos perdidos en una o varias columnas</title>
      <link>https://bastianolea.rbind.io/blog/2025-10-21/</link>
      <pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2025-10-21/</guid>
      <description>&lt;p&gt;Cuando estamos limpiando datos frecuentemente nos preguntamos &lt;strong&gt;cuántos &#xA;&lt;a href=&#34;../../../tags/datos-perdidos/&#34;&gt;datos perdidos&lt;/a&gt; tiene una columna.&lt;/strong&gt; La respuesta se obtiene pidiendo un resumen (&lt;code&gt;summarize()&lt;/code&gt;) que cuente la suma de datos perdidos (&lt;code&gt;sum(is.na())&lt;/code&gt;) en una columna específica.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# contar datos perdidos en una columna&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&amp;gt;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;summarize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;missings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;is.na&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Sepal.Length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;  missings&#xA;1        0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;¿Pero qué pasa si tienes muchas columnas y quieres revisarlo en todas? No vas a andar escribiendo las columnas una por una&amp;hellip; 😵‍💫&lt;/p&gt;</description>
    </item>
    <item>
      <title>Validación de datos con `{testthat}` y `{pointblank}`</title>
      <link>https://bastianolea.rbind.io/blog/validacion_datos/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/validacion_datos/</guid>
      <description>&lt;a href=&#34;pointblank-1.png&#34; target=&#34;_blank&#34;&gt;&#xA;&#xA;  &lt;img src=&#34;pointblank-1.png&#34; style=&#34;border-radius: 5px; width: 80%; max-width: 700px; display: block; margin: auto; margin-bottom: 8px; margin-top: 8px;&#34;&gt;&#xA;  &#xA;&lt;/a&gt;&#xA;&lt;p&gt;En un &#xA;&lt;a href=&#34;../../../blog/validacion_basica&#34;&gt;post anterior&lt;/a&gt; hablé sobre cómo hacer validación básica de datos en R. A grandes razgos, vimos la utilidad de crear funciones que contengan pruebas simples para validar la calidad de tus datos, tales como revisar cantidad de filas, cantidad de datos perdidos, y otros.&lt;/p&gt;&#xA;&lt;p&gt;Dado que R es un lenguaje enfocado en el análisis de datos, existen varios paquetes que nos pueden ayudar con la validación de datos!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unir o cruzar datos con left_join()</title>
      <link>https://bastianolea.rbind.io/blog/left_join/</link>
      <pubDate>Sat, 16 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/left_join/</guid>
      <description>&lt;p&gt;El &lt;em&gt;left join&lt;/em&gt; es una de las operaciones básicas del trabajo con datos, en el sentido de que realiza una operación sencilla que a la vez es muy útil. Sirve tanto para limpiar datos como para procesarlos y obtener nuevas relaciones entre ellos.&lt;/p&gt;&#xA;&lt;p&gt;Un &lt;em&gt;left join&lt;/em&gt; realiza una unión o combinación entre dos tablas de datos a partir de una variable en común o &lt;em&gt;clave&lt;/em&gt; (&lt;em&gt;key&lt;/em&gt;). En otras palabras, un &lt;em&gt;left join&lt;/em&gt; toma dos tablas que tienen datos distintos, pero que comparten una variable o columna en común, y usa esta variable en común para &lt;strong&gt;unir las observaciones de ambas tablas&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crea planillas de Excel con formato personalizado desde R con {openxlsx}</title>
      <link>https://bastianolea.rbind.io/blog/excel_openxlsx/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/excel_openxlsx/</guid>
      <description>&lt;p&gt;Al terminar el procesamiento o limpieza de un conjunto de datos, usualmente necesitamos &lt;em&gt;entregar&lt;/em&gt; la base en un formato más amigable para otros colegas o usuarios/as, lo que significa: Excel. Exportar datos de R a Excel es fácil: con la función &lt;code&gt;writexl::write_xlsx()&lt;/code&gt; podemos guardar cualquier dataframe en Excel. Pero esta función hace sólo eso, y el archivo resultante es básico y hasta feo.&lt;/p&gt;&#xA;&lt;p&gt;Sin embargo, existe el &#xA;&lt;a href=&#34;https://ycphs.github.io/openxlsx/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;paquete &lt;code&gt;{openxlsx}&lt;/code&gt;&lt;/a&gt;, que además de leer y escribir archivos Excel, nos entrega funciones para generar archivos Excel desde R que contengan &lt;strong&gt;todo tipo de formato, estilo de tablas, y manipulación celda por celda&lt;/strong&gt; del archivo resultante, con lo que podemos &lt;strong&gt;generar planillas de Excel atractivas desde R.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Echa un vistazo preliminar a tus datos con {visdat}</title>
      <link>https://bastianolea.rbind.io/blog/visdat/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/visdat/</guid>
      <description>&lt;p&gt;En una clase reciente me preguntaron &#xA;&lt;a href=&#34;../../../blog/2025-10-21/&#34;&gt;cómo saber de una dónde hay datos perdidos o &lt;em&gt;missing&lt;/em&gt;&lt;/a&gt; en un conjunto de datos. La respuesta que di fue usar &lt;code&gt;summarize()&lt;/code&gt; para contar la cantidad de datos perdidos en todas las columnas de un dataframe:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# manipulación de datos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# ensuciar datos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# agregar datos perdidos al azar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&amp;gt;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;messy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;make_missing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&amp;gt;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# resumir los datos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;summarize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# en todas las columnas&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;across&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;everything&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;c1&#34;&gt;# contar la cantidad de missing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;is.na&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;  Sepal.Length Sepal.Width Petal.Length Petal.Width Species&#xA;1           12          21           16          21      11&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Pero hay formas más convenientes de hacerlo!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gráficos para identificar datos outliers o anómalos en R</title>
      <link>https://bastianolea.rbind.io/blog/2025-06-18/</link>
      <pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2025-06-18/</guid>
      <description>&lt;link href=&#34;index_files/libs/htmltools-fill-0.5.8.1/fill.css&#34; rel=&#34;stylesheet&#34; /&gt;&#xA;&lt;script src=&#34;index_files/libs/htmlwidgets-1.6.4/htmlwidgets.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;index_files/libs/d3-bundle-5.16.0/d3-bundle.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;index_files/libs/d3-lasso-0.0.5/d3-lasso.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;index_files/libs/save-svg-as-png-1.4.17/save-svg-as-png.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;index_files/libs/flatbush-4.4.0/flatbush.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;link href=&#34;index_files/libs/ggiraphjs-0.8.10/ggiraphjs.min.css&#34; rel=&#34;stylesheet&#34; /&gt;&#xA;&lt;script src=&#34;index_files/libs/ggiraphjs-0.8.10/ggiraphjs.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;index_files/libs/girafe-binding-0.8.10/girafe.js&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;Los datos anómalos o &lt;em&gt;outliers&lt;/em&gt; son datos que se alejan considerablemente de los demás. Estos datos pueden resultar problemáticos para ciertos análisis, pueden ser indicio de errores en la recolección o limpieza de datos, o pueden requerir que tomemos ciertas decisiones para corregirlos o excluirlos.&lt;/p&gt;&#xA;&lt;p&gt;En este post &lt;strong&gt;simularemos un dataset&lt;/strong&gt; con datos anómalos, y luego mostraremos algunas formas de &lt;strong&gt;visualización de datos anómalos&lt;/strong&gt; &#xA;&lt;a href=&#34;../../../tags/ggplot2/&#34;&gt;en &lt;code&gt;{ggplot2}&lt;/code&gt;&lt;/a&gt; para tomar decisiones al respecto. Al final crearemos un &lt;strong&gt;gráfico interactivo&lt;/strong&gt; &#xA;&lt;a href=&#34;https://davidgohel.github.io/ggiraph/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;con &lt;code&gt;{ggiraph}&lt;/code&gt;&lt;/a&gt; que permita poner el cursor sobre las observaciones para obtener más información.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limpieza y recodificación de datos de texto en R con {stringr}</title>
      <link>https://bastianolea.rbind.io/blog/stringr_texto/</link>
      <pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/stringr_texto/</guid>
      <description>&lt;div style = &#34;margin-left: -16px;&#34;&gt;&#xA;  &#xA;  &lt;details closed id=&#34;PageTableOfContents&#34;&gt;&#xA;    &lt;summary&gt;&#xA;      &lt;h2 class=&#34;mv0 f5 fw7 ttu tracked dib&#34; style = &#34;margin-left: 6px; font-size: 120%;&#34;&gt;Índice&lt;/h2&gt;&#xA;      &lt;/summary&gt;&#xA;    &lt;div class=&#34;pl2 pr0 mh0&#34; style = &#34;font-size: 90%; margin-top: -8px; margin-left: 16px; margin-bottom: 32px;&#34;&gt;&#xA;    &lt;nav id=&#34;TableOfContents&#34;&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&#xA;      &lt;ul&gt;&#xA;        &lt;li&gt;&lt;a href=&#34;#crear-variable-a-partir-de-la-detección-de-texto&#34;&gt;Crear variable a partir de la detección de texto&lt;/a&gt;&lt;/li&gt;&#xA;      &lt;/ul&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#cambiar-la-capitalización-de-un-texto&#34;&gt;Cambiar la capitalización de un texto&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;#expresiones-regulares&#34;&gt;Expresiones regulares&lt;/a&gt;&#xA;      &lt;ul&gt;&#xA;        &lt;li&gt;&lt;a href=&#34;#extraer-caracteres-desde-un-texto&#34;&gt;Extraer caracteres desde un texto&lt;/a&gt;&lt;/li&gt;&#xA;      &lt;/ul&gt;&#xA;    &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/nav&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/details&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;p&gt;&#xA;&lt;a href=&#34;https://stringr.tidyverse.org/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;El paquete &lt;code&gt;{stringr}&lt;/code&gt;&lt;/a&gt; facilita todo tipo de trabajo que implique texto en R.&lt;/p&gt;&#xA;&lt;p&gt;En general, los datos que vienen como texto suelen necesitar una limpieza previa, y adicionalmente un procesamiento para poder aprovecharlos mejor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limpiar textos con símbolos, tildes o eñes en R</title>
      <link>https://bastianolea.rbind.io/blog/limpiar_texto_simbolos/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/limpiar_texto_simbolos/</guid>
      <description>&lt;p&gt;Amamos el castellano, con sus tildes y eñes, y nos encanta que R no tenga problemas para usar estos símbolos en cualquier parte del lenguaje. Pero hay veces en las que necesitamos deshacernos de estos símbolos especiales, como tildes, eñes, e incluso mayúsculas.&lt;/p&gt;&#xA;&lt;p&gt;Por ejemplo:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Si queremos dar nombres a carpetas (porque puede dar conflictos con otros sistemas operativos o para subir archivos a internet),&lt;/li&gt;&#xA;&lt;li&gt;Si queremos buscar coincidencias de texto con &lt;code&gt;stringr::str_detect()&lt;/code&gt; y queremos aumentar probabilidades de coincidir al omitir variaciones de los caracteres,&lt;/li&gt;&#xA;&lt;li&gt;Si queremos hacer un &lt;code&gt;left_join()&lt;/code&gt; entre dos bases de datos con formas distintas de guardar los datos (todos en mayúscula, todos sin tilde pero con eñes, etc.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Hay muchas formas distintas de hacerlo, dependiendo de lo que necesitemos. El paquete &lt;code&gt;{stringr}&lt;/code&gt; se enfoca en el procesamiento de texto y tiene varias funciones que nos pueden ayudar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rellenar datos perdidos usando datos de otra tabla</title>
      <link>https://bastianolea.rbind.io/blog/2025-02-14/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2025-02-14/</guid>
      <description>&lt;p&gt;¿Te ha pasado que tienes una tabla con datos perdidos, y otra tabla con una columna que coincide con la primera tabla, que además cuenta con datos que quieres usar para rellenar las observaciones perdidas? Antes pensaba que esto se resolvía con &lt;code&gt;left_join()&lt;/code&gt; y algún ajuste para reemplazar los perdidos con los datos anexados. Pero ayer conocí una función que resuelve este problema de inmediato: &lt;code&gt;rows_update()&lt;/code&gt;!&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;suppressPackageStartupMessages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tabla_1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;tibble&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ciudad&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Santiago&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Concepción&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Valparaíso&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Arica&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;n&#34;&gt;poblacion&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7123891&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1036142&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1054253&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;221364&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;n&#34;&gt;temperatura&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;17.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;NA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;19.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tabla_1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;# A tibble: 4 × 3&#xA;  ciudad     poblacion temperatura&#xA;  &amp;lt;chr&amp;gt;          &amp;lt;dbl&amp;gt;       &amp;lt;dbl&amp;gt;&#xA;1 Santiago     7123891        NA  &#xA;2 Concepción   1036142        17.6&#xA;3 Valparaíso   1054253        NA  &#xA;4 Arica         221364        19.2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tabla_2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;tibble&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ciudad&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Santiago&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Rancagua&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Concepción&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Arica&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Valparaíso&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;n&#34;&gt;temperatura&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22.8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;14.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;17.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;19.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;17.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tabla_2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;# A tibble: 5 × 2&#xA;  ciudad     temperatura&#xA;  &amp;lt;chr&amp;gt;            &amp;lt;dbl&amp;gt;&#xA;1 Santiago          22.8&#xA;2 Rancagua          14  &#xA;3 Concepción        17.6&#xA;4 Arica             19.2&#xA;5 Valparaíso        17.5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;En este ejemplo, tenemos dos tablas: la primera tiene una columna con datos perdidos o faltantes, y la segunda tabla, de datos similares, contiene las observaciones que en la primera tabla están faltando.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Video: Taller Aplicación de la Ciencia de Datos en la Gestión Municipal</title>
      <link>https://bastianolea.rbind.io/blog/unim/taller_ciencia_de_datos_gestion_municipal/</link>
      <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/unim/taller_ciencia_de_datos_gestion_municipal/</guid>
      <description>&lt;p&gt;Tuve el privilegio de exponer en la &lt;strong&gt;Universidad Internacional de la Municipalidad de Rancagua&lt;/strong&gt;, un espacio de diálogo, aprendizaje y colaboración, organizado por el &lt;strong&gt;Programa de Gobierno Local Abierto&lt;/strong&gt; (GOBLA) de la Municipalidad de Rancagua.&lt;/p&gt;&#xA;&lt;p&gt;Presenté un taller dirigido a funcionarios y funcionarias municipales sobre Aplicación de la ciencia de datos en la Gestión Municipal, donde comuniqué la importancia de manejar herramientas de progamación para le análisis de datos, favoreciendo el desarrollo de herramientas reutilizables, reproducibles, transparentes y abiertas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contar días hábiles entre dos fechas en R</title>
      <link>https://bastianolea.rbind.io/blog/contar_dias_habiles/</link>
      <pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/contar_dias_habiles/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# manipulación de datos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lubridate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# trabajar con fechas&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RQuantLib&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# paquete con calendarios&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bizdays&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# paquete para contar días hábiles&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hoy se me planteó un pequeño desafío que no había tenido que hacer antes. Tenía que contar la cantidad de días entre dos fechas.&lt;/p&gt;&#xA;&lt;p&gt;Esto no es particularmente complejo, de hecho es demasiado fácil:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h3 id=&#34;contar-la-cantidad-de-días-entre-dos-fechas&#34;&gt;Contar la cantidad de días entre dos fechas&#xA;  &lt;a href=&#34;#contar-la-cantidad-de-d%c3%adas-entre-dos-fechas&#34;&gt;&lt;svg class=&#34;anchor-symbol&#34; aria-hidden=&#34;true&#34; height=&#34;26&#34; width=&#34;26&#34; viewBox=&#34;0 0 22 22&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;      &lt;path d=&#34;M0 0h24v24H0z&#34; fill=&#34;currentColor&#34;&gt;&lt;/path&gt;&#xA;      &lt;path d=&#34;M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z&#34;&gt;&lt;/path&gt;&#xA;    &lt;/svg&gt;&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Primero definimos las dos fechas:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tips para limpieza de datos en R</title>
      <link>https://bastianolea.rbind.io/blog/limpieza_tips/</link>
      <pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/limpieza_tips/</guid>
      <description>&lt;p&gt;En este post dejo algunos de los paquetes y funciones que uso frecuentemente al momento de limpiar datos en R. Voy a ir actualizando este post por si se me van ocurriendo más.&lt;/p&gt;&#xA;&lt;div style = &#34;max-width: 220px&#34;&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;janitor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stringr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lubridate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;h3 id=&#34;limpiar-nombres-de-columnas&#34;&gt;Limpiar nombres de columnas&#xA;  &lt;a href=&#34;#limpiar-nombres-de-columnas&#34;&gt;&lt;svg class=&#34;anchor-symbol&#34; aria-hidden=&#34;true&#34; height=&#34;26&#34; width=&#34;26&#34; viewBox=&#34;0 0 22 22&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;      &lt;path d=&#34;M0 0h24v24H0z&#34; fill=&#34;currentColor&#34;&gt;&lt;/path&gt;&#xA;      &lt;path d=&#34;M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z&#34;&gt;&lt;/path&gt;&#xA;    &lt;/svg&gt;&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;janitor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;clean_names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Como su nombre lo indica, esta función cambia los nombres de las variables o columnas para estandarizar la forma en que están escritas: todo en minúsculas, sin espacios, sin símbolos, y las palabras separadas con guión bajo. Esto facilita mucho el trabajo con datos, ya que minimiza las probabilidades de qué te equivoques al escribir el nombre de una columna. Personalmente siempre ocupo esta función al momento de cargar datos, sobre todo si estos datos vienen desde Excel. Lo único malo de &lt;code&gt;clean_names()&lt;/code&gt; es que esta función también cambia las eñes por enes.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
