Cuando empecé con R uno de los problemas fundamentales fue aprender a leer los datos para empezar a trabajar.
Es una etapa fundamental antes de empezar con la exploración de los datos y el posterior análisis.
Y quizá en mis inicios no le daba la atención que se merecía, y siempre estaba buscando en internet cómo poder importar datos en R: tanto archivos Excel como datos tipo .txt (ASCII para los amigos) .csv y archivos html.
Tenía más o menos claro cómo hacerlo, pero nunca había recogido las rutinas para leer datos.
Así que hoy quiero ayudarte a leer datos en R de manera sencilla utilizando unas rutinas efectivas. ¡A por ello!
Como quiero que practiques te paso el ejemplo del artículo:
# El roadmap: de los datos brutos a información
Quizá ya lo sepas pero me gustaría antes presentarte las etapas de los datos hasta llegar a la información y resaltar la importancia de la lectura.
Estas son las etapas:
- Lectura o importación de datos
- Limpieza de formato de datos
- Exploración
- Análisis
- Extracción de Información útil
Seguramente ya las conocías pero quédate con una cosa. ¿La etapa número 1 cuál es? La lectura o la importación. Queda todo dicho.
Sin datos vamos mal. Y los datos pueden tener muchos formatos. Por ello, en los próximos apartados te he recogido los formatos más habituales para que veas cómo puedes importar datos en R fácilmente.
A mi siempre me hubiera gustado tener un listado como el que te voy a mostrar.
Los formatos de datos más típicos son archivos ASCII (txt), csv y archivos de Excel.
# Importar archivos txt o csv (en general ASCII)
Los datos planos o ASCII en general que trabajan con caracteres tienen dos peculiaridades:
- El header o encabezamiento
- La separación de caracteres que indican la separación de columnas: pueden estar separadas por comas, puntos y comas, por tabulación, etc…
Estos son los tres tipos de archivos que te vas a encontrar en la práctica:
TIPO 1: NO tienes header. Solo datos
TIPO 2: En la primera línea tienes header. A partir de la 2, datos.
TIPO 3: Tienes un header engañoso
Ahora te explico cómo leerlos.
Tienes dos opciones:
- Trabajar con el paquete ‘readr’ efectivo cuando tienes muchos datos.
- Trabajar con la sentencia read.table.
# OPCIÓN 1:utilizar el paquete readr
PASO1: cargar el paquete ‘readr’
Según mi experiencia el paquete “readr” es fantástico usarlo. Es muy práctico. Para cargarlo puedes utilizar esta sentencia:
<pres class= «lang:R»>
# Instalar el paquete ‘readr’ el paquete más práctico para leer ficheros
install.packages(«readr»)
# Cargar el paquete
library(«readr»)
</pre>
PASO2: utilizar una sentencia de la siguientes:
Una vez cargado puedes trabajar con él. Tienes tres funciones que vas a utilizar:
- read_csv(): para leer archivos con coma (“,”) como separador
- read_csv2(): para leer archivos con punto y coma (“;”) como separador
- read_tsv(): para leer archivos con tabulador (“\t”) como separador
- read_delim(,sep =’|’): para leer archivos con separador distintos como puede ser el símbolo ‘|’
Leer archivos de tu PC poniendo la ruta del archivo
Para poder leer bien los archivos tienes que proporcionarle a R la ruta del archivo con el nombre. Lo puedes hacer tú poniendo toda la ruta con el nombre y la extensión. Tipo:
tusDatos <- read_csv(“la_ruta_del_archivo”)
Por ejemplo:
[sourcecode lang=»r»]
tusDatos <- read_csv(«D:\Jordi\blog\contingut\post47-Como improtar datos en R/ejemplo-datos.txt») [/sourcecode] Tienes otra opción más molona 🙂
Leer archivos de tu PC seleccionando con el mouse
Si eres novato te recomiendo que selecciones los datos con una ventana emergente usando file.choose(). Así de fácil:
Para leer datos seleccionando el archivo de tu PC con el ratón puedes utilizar:
1 2 3 4 5 6 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> tusDatos <- read_csv(file.choose()) tusDatos <- read_csv2(file.choose()) tusDatos <- read_tsv(file.choose()) tusDatos <- read_delim(file.choose(),sep ='|') <span class="enlighter-g1">[</span><span class="enlighter-text">/sourcecode</span><span class="enlighter-g1">]</span> |
Leer archivo de internet
Ahora se trata de poner la ruta de la web donde hay datos. Puedes probar con esta línea de código:
1 2 3 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> tusDatos <- read_tsv("http://www.sthda.com/upload/boxplot_format.txt") [/sourcecode] |
# Cómo leer los tres tipos de archivos con el paquete readr
El código para leer los tres tipos de archivos:
1 2 3 4 5 6 7 8 9 10 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> # TIPO 1: solo datos tusDatos <- read_csv(file.choose(),skip = 0,col_names = FALSE) # TIPO 2: encabezado una linea + datos tusDatos <- read_csv(file.choose(),skip = 0,col_names = TRUE) # TIPO 3: encabezado raro + datos tusDatos <- read_csv(file.choose(),skip = 8,col_names = TRUE) [/sourcecode] |
# OPCIÓN 2: utilizar la función read.table
Recomiendo esta opción cuando no tienes demasiados datos (yo siempre he usado esta opción).
Puedes ir un paso más allá y trabajar como un pro. Para casos especiales cuando tienes encabezados. Es decir tienes caracteres que no quieres leer en las primeras filas.
tusDatos <- read.table(file.choose(), skip = 2, header =TRUE, sep =‘;’)
En este caso NO vas a leer las dos primeras filas y la tercera serán los nombres de las columnas (de las variables). Además el separador será en ; .
Para el ejemplo que te he puesto:
1 2 3 4 5 6 7 8 9 10 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> # TIPO 1: solo datos tusDatos <- read.table(file.choose(), skip = 0, header = FALSE, sep =',') # TIPO 2: encabezado una linea + datos tusDatos <- read.table(file.choose(), skip = 0, header = TRUE, sep =',') # TIPO 3: encabezado raro + datos tusDatos <- read.table(file.choose(), skip = 8, header = TRUE, sep =',') [/sourcecode] |
Esta es la forma más general de leer un archivo de texto, ASCII o plano. ¡Recuérdala!
# Importar archivos Excel
Otros archivos muy típicos para trabajar son los datos de una tabla Excel.
OPCIÓN1: Puedes utilizar un método muy sencillo.
- Selecciona los datos de Excel y cópialo
- Lee los datos copiados con este código
1 2 3 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> read.table(file = "clipboard", sep = "\t", header=TRUE) [/sourcecode] |
¿Fácil, verdad?
OPCIÓN2: Utilizar el paquete “readxl” y podrás leer los archivos Excel que quieras.
Recuerda que la primera fila del Excel corresponden a los nombres de las variables. Para ser elegante trabaja así.
1 2 3 4 5 6 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> # Instalar el paquete 'readxls' el paquete más práctico para leer ficheros Excel install.packages("readr") # Leer el paquete library("readxl") [/sourcecode] |
Para leer los datos solo tienes que hacer lo siguiente:
1 2 3 4 5 6 |
<span class="enlighter-g1">[</span><span class="enlighter-text">sourcecode language=</span><span class="enlighter-s0">"r"</span><span class="enlighter-g1">]</span> # Puedes leer la hoja poniendo el nombre misDatos <- read_excel(file.choose(), sheet = "el nombre de la Hoja que quieres leer") # Puedes leer la hoja número 1. La primera de todas misDatos <- read_excel(file.choose(), sheet = 1) [/sourcecode] |
Ya sabes leer archivos planos y de Excel de manera sencilla. ¡No está nada nada mal!
Puedes descargarte el ejemplo de R aquí:
…
Ahora te toca a ti. Prueba estas enseñanzas y a ver qué tal te va! Cuéntamelo en los comentarios 😉
muchas gracias por el aporte, en verdad me resultó muy útil
De eso se trata Liliana! 😉
Jordi, gracias me ha sido muy útil!.
Saludos desde Chile
Hola Alvaro!
Muchas gracias a ti! Me alegro que te sirva 🙂
Saludos de BCN!
Hola Jordi
estoy teniendo problemas al leer un archivo de excel en RGui(32-bit):
> read.csv(«C:/Usuarios/Fabiola/Mis documentos/data/clase.csv», header=T)
Error in file(file, «rt») : no se puede abrir la conexión
Además: Warning message:
In file(file, «rt») :
no fue posible abrir el archivo ‘C:/Usuarios/Fabiola/Mis documentos/data/clase.csv’: No such file or directory
espero puedas apoyarme de favor
Hola Fabiola!
Puede ser que no tengas bien puesto el directorio:
Prúeba así:
read.csv(«C:/Usuarios/Fabiola/Mis documentos/data/clase.csv», header=T)
Excelente aporte. Gracias, me esta ayudando mucho. Saludos de ArgentinA
Gracias Alejandro!
De esto trata el blog 😉
De ayudar 🙂 con explicaciones lo más sencillas posibles
Muchas gracias por tu aportación, es muy claro como lo abordas y explicas cada opción. Actualmente me estoy iniciando en el uso del R y me ha resultado de mucha ayuda. Gracias Jordi
Gracias Rafael por tus palabras! Espero que vayas avanzado poco a poco en RStudio!
Abrazos!
Muy claras tus explicaciones , muchas gracias por el aporte, me estoy iniciando en R y me servira mucho
Gracias
Buenas Jordi, no consigo abrir /leer tablas en csv con R ni con R studio. De las opciones que planteas aquí, readr no me funciona por asuntos de version creada antes de.. y con read.table no consigo tampoco, me da errores la ruta entre comillas y no me funciona la ventana emergente que debe de salir con la opción file.choose. ¿Un poco de luz? gracias
muy util tio muchas gracias
Hola, estoy empezando a aprender R debido a una nueva necesidad surgida, sin embargo, no sé si con este software sería capaz de solucionarlo.
Necesito que R lea los archivos .txt de una carpeta definida y que tienen una cabecera definida donde la linea 5 (no siempre) empieza con las palabras PS (nombre) y a continuación un dato que va variando según quien lo ha generado.
Hay diez posibles variaciones de este dato, y necesito guardar este txt en una carpeta definida según este dato. Es decir necesito filtrar estos txt de una BBDD y almacenarlos en otras diez carpetas de forma ordenada según un campo específico.
Es posible realizar esta tarea de forma automática, es decir, que cada vez que entre un archivo txt en esta carpeta realice el filtrado? sería posible además dejar un registro donde se pueda comprobar si la tarea se ha realizado con exito. O mejor aún crear alguna alarma de aviso cuando hay un error y cuando se realiza con exito.
Y por ultimo esto se como se ejecutaria? de forma manual? podría estar corriendo de forma automática o necesita ejecutarse por ejemplo desde las tareas de windows.
Saludos y Gracias
Hola Jordi! Muchas gracias por tu aporte.
Una pregunta más, tenés algún artículo donde explique cómo resolver problemas en el archivo original? por ejemplo, tengo un csv de airbnb que viene con saltos de línea (a veces dos o tres), y en consecuencia se corta la importación. Hay alguna forma de salvar este error o tengo que corregir el original a mano siempre?
Hola Jordi, muchachos. Consulta como leer tablas desde internet tipo wikipedia ejemplo :
https://en.wikipedia.org/wiki/Corruption_Perceptions_Index
Muchas gracias Jordi, aunque me salen unos warning pero creo no afectan o si?
Muy buenos días Jordi, excelente tutorial. Quisiera consultarte, tengo un documento de texto con datos que quiero leer, entre los datos hay una columna que guarda datos de fecha en formato dd/mm/aa, la pregunta es, ¿ Hay alguna instrucción para leer archivos de texto en la que yo pueda especificar un filtro en el que solo se caguen desde el archivo de texto las filas en las que mi columna de fechas este entre una fecha a y una fecha b?. Agradezco cualquier orientación al respecto
Muchas gracias, y una vez leído el archivo, ¿cómo puedo cargarlo en BD?