library(readxl)
library(dplyr)
1 Limpieza de Datos
1.1 Identificación de datos faltantes
Para comenzar la limpieza de datos en primer lugar debemos ver si existen datos faltantes, y en este caso escribir un código que permita reemplazar la nomenclatura que trae por NA
que es como R lee los datos faltantes.
Esto puede realizarse cuando importamos el dataset o podemos hacerlo una vez que ya lo tenemos importado. Vemos las dos formas.
Primera forma (es mucho más simple)
En este caso dentro del propio código de importación incorporamos un fragmento que nos permite identificar palabras o espacios como datos faltantes, es decir NA.
# Establecer el na argumento para datos faltantes
<- read_excel("IRA.xlsx", na = "*sin dato*") ira
Segunda forma (una vez importado el dataset)
Otra forma de realizarlo es una vez que tenemos el dataset incorporado realizarlo con la función mutate()
del paquete dplyr
Importante: Hay que tener en cuenta que en nuestro dataset tendremos columnas con distintas estructuras de datos como: caracter, número o fechas. Pero como R no soporta más de una estructura por columna para importar nuestro archivo nos convirtió las fechas y números en formato caracter, ya que en ellas se encontraba el valor: sin dato.
Por lo cual necesitaremos primero convertir sin datos por NA y luego transformar su estructura en fechas y números nuevamente.
Importamos el dataset sin incorporar en el fragmento de código los NA
. Supongamos que tenemos un dataset llamado ira2:
<- read_excel("IRA.xlsx") ira2
En este ejemplo veremos de cambiar en primer lugar todas las columnas de caracter con el NA:
# Reemplazar valores específicos con NA en columnas de carácter
<- ira2 %>%
ira2_na mutate(across(where(is.character), na_if, "*sin dato*"))
Cuando usamos across()
con mutate()
, estamos diciendo que queremos aplicar una función a todas las columnas del dataset. Aquí, la estamos utilizando para aplicar una transformación a todas las columnas que cumplen con una condición específica (en este caso, las de tipo carácter). En este caso, estamos usando na_if
dentro de across()
para reemplazar todas las apariciones de "*sin dato*"
en columnas de texto por NA.
“Para cada valor en las columnas, reemplaza sin datos
por NA
.”
1.2 Trabajo con fechas
Como vimos anteriormente comprender la estructura de datos que tiene nuestro dataset es muy importante para poder manipularlos y administarlos. Por ello vamos a ver como trabajar específicamente con fechas.
1.2.1 Conversión de estructuras
En R, hay dos tipos de vectores diferentes que podemos usar para almacenar y trabajar con fechas:
date
vectores para trabajar con valores de fecha, ejemplo:2009-01-08
.POSIXct
para trabajar con valores de fecha y hora, ejemplo:2009-01-08 20:00:00
.
En general, es recomendable trabajar con valores de fecha, en lugar de valores de fecha y hora, siempre que sea posible.
Revisión de datos
En los dataset importados las columnas de “Fecha de toma de muestra” y “Fecha de estudio” se importaron con una estructura de caracter (ya que la información “sin dato” provocó que R leyera como caracter toda la columna).
Como Excel guarda las fechas: Cuando importamos datos de Excel a R y las fechas están en formato de texto con valores como “sin datos”, R puede interpretar esas fechas como números, especialmente si Excel las guarda como números seriales (que es un formato común para fechas en Excel). El número que aperece con este corresponde a la cantidad de días transcurridos desde el 1 de enero de 1900 (formato predeterminado de Excel para las fechas).
Para convertir estos números de serie de Excel a fechas en R, se puede utilizar
as.Date()
con la opciónorigin = "1899-12-30".
Este “origen” se debe a que Excel considera el día 1 como el 1 de enero de 1900, pero hay un ajuste de 1 día debido a un error histórico en Excel.Como R guarda las fechas: R almacena las fechas como números. En concreto, la cantidad de días antes o después del 1 de enero de 1970 a las 00:00:00 UTC.
Esto es simplemente por si aparecen números que no comprendemos de donde vienen en las columnas fechas. Pero los vamos a trabajar de la misma manera:
Utilizar la funcion mutate()
para modificar las columnas necesarias a fechas con as.Date
<- ira2_na %>%
ira2_fechas mutate(across(c("Fecha de toma de muestra", "Fecha estudio"),
~ as.Date(as.numeric(.), origin = "1899-12-30")))
Este código toma las columnas "Fecha de toma de muestra"
y "Fecha estudio"
de un dataset, y las convierte en fechas reales a partir de números que representan días desde una fecha base (en este caso, 1 de enero de 1900, como ocurre en Excel). Primero, las columnas son convertidas a números con as.numeric()
, para asegurar que los valores sean tratados como datos numéricos y no como texto. Luego, as.Date()
convierte esos números en fechas, utilizando la fecha de origen “1899-12-30”, que es el estándar para la conversión de fechas en Excel. De esta forma, los valores numéricos son transformados correctamente en fechas reconocidas por R.
1.2.2 Conversión de POSIXct a date
Ahora veremos como covertir datos POSIXct a date para una majeor manipulación de los mismos.
# Coversión de POSIXCT a date
$`Fecha Nacimiento` <- as.Date(ira2_fechas$`Fecha Nacimiento`)
ira2_fechas
$`Fecha Apertura` <- as.Date(ira2_fechas$`Fecha Apertura`) ira2_fechas
Este código toma la columna Fecha Nacimiento
del data frame
ira2_fechas
y convierte los valores de esa columna al formato de fecha (Date
) utilizando la función as.Date()
. Lo que hace es sobrescribir los valores actuales de Fecha Nacimiento
con los nuevos valores ya convertidos en formato de fecha.
O es lo mismo que usar la función mutate()
que vimos anteriormente:
# Coversión de POSIXCT a date
library(dplyr)
<- ira2_fechas %>%
ira2_fechas mutate(across(c(`Fecha Nacimiento`, `Fecha Apertura`), as.Date))
Comprobamos que se realizó la modificación
sapply(ira2_fechas, class)
1.2.3 Conversión de formato de fecha
Tambien puedo querer cambiar el formato de fecha, por ejemplo si tengo un valor de fecha como 21/10/2024
<- as.Date("2024-10-21")
fecha
<- format(fecha, format = "%d/%m/%Y")
fecha
fecha
[1] "21/10/2024"
O si tengo en una columna de mi dataset
<- ira2_fechas %>%
ira2_fechas mutate(`Fecha Apertura` = format(`Fecha Apertura`, format = "%d/%m/%Y"))
1.2.3.1 Ejemplos de formatos de fechas:
Algunas fechas incorporadas en R
Sys.Date()
: Devuelve la fecha actual del sistema en formato Date
.
Sys.Date()
[1] "2024-12-01"
class(Sys.Date())
[1] "Date"
1.3 Normalización de caracteres
1.3.1 Modificación de minúsculas y mayúsculas
# Pasar todo a mayúsculas
<- ira %>%
ira mutate(across(where(is.character), toupper))
# Pasar todo a minúscula
<- ira %>%
ira mutate(across(where(is.character), tolower))
1.3.2 Quitar espacios en blanco
# Sacar espacios en blanco
<- ira %>%
ira mutate(across(where(is.character), str_squish))
1.3.3 Quitar acentos
# Sacar acentos
<- ira %>%
ira mutate(across(where(is.character), ~ stri_trans_general(., "Latin-ASCII")))
Ejemplo con las tres modificaciones en un mismo código:
library(stringr)
library(stringi)
# Ejemplo de una palabra con espacios y acentos
<- " Ángela "
palabra
# Transformar la palabra: a mayúsculas, eliminar espacios y quitar acentos
<- toupper(str_trim(stri_trans_general(palabra, "Latin-ASCII")))
palabra_limpia
# Ver el resultado
print(palabra_limpia)
[1] "ANGELA"
Antes de guardar y cerrar nuestro archivo es necesario que guardemos nuestro nuevo marcos de datos con el que estuvimos trabajando para que no se pierdan los procesos anteriores con la función write_xlsx()
2 Guardar el DataFrame
Guardar los datos en formato .xlsx
es una buena opción si lo que se busca es preservar la estructura de datos después de la limpieza y además no queremos repetir el proceso en un nuevo proyecto. Se puede guardar un dataframe en un archivo .xlsx
usando el paquete writexl.
install.packages("writexl")
library(writexl)
# Guardar y especificar el nuevo nombre de archivo
write_xlsx(ira, path = "IRA.xlsx")
El código guarda los datos del objeto ira
(es decir el data frame con el que venimos trabajando) en un archivo Excel llamado ira.xlsx
(aquí podemos colocar el nombre que queramos agregando siempre el tipo de formato en que queremos exportarlo “.xlsx” en este caso).
Este archivo se crea en el lugar indicado por la ruta especificada en el argumento path
. En este caso como estamos trabajando dentro de un proyecto de R no es necesario especificar ruta de archivo, ya que con el nombre que queremos ponerle a nuestro documento y agregando el “.xlsx” es sufuciente para R nos guarde nuestro dataset en el directorio de trabajo donde esta alojado el proyecto.