¿Cómo leer/guardar información en R?

¿Cómo leer/guardar información en R?

nov´17 Rosana Ferrero 0 comentarios

En R podemos leer o guardar datos, funciones, códigos y gráficos; aquí te dejamos la mejor selección de funciones para ello.

Tabla de contenidos

1. Guardar datos (data.frame o matrix) en formato de tabla (.txt, .csv, .xls, .xlsx)

Desde archivos delimitados (.txt, .csv o .xls)

  • Para guardar datos:
  1. write.table() y write.csv() -los objetos tipo data.frame o matriz podemos guardarlos, uno a la vez, en un archivo externo manteniendo su estructura-
  2. write() -guarda datos atómicos en un archivo externo de texto-
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, ...)

write.csv(...)

Para leer datos:

read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", row.names, col.names, na.strings = "NA", ...)

read.csv(file, header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...)

donde "x" es el objeto que queremos escribir (en formato matriz o data.frame), en «file» especificamos la ruta y nombre del documento que deseamos abrir/guardar, aquí "append" solo relevante si el archivo es una cadena de caracteres (si es TRUE, la salida se agrega al archivo, si es FALSE se destruye cualquier archivo existente del nombre), "quote" sirve para indicar si queremos comillas a los nombres (TRUE/FALSE o índices), con «sep» indicamos el tipo de separador de los datos ",", ";", "\t", etc.), con "na" indicamos cómo vienen representados los datos ausentes (NA, algunos usan los valores 999 o 9999, pero no lo recomiendo), la opción "dec" nos permite especificar cómo están dados los decimales (con "," o "."; recuerden que R utiliza punto y Excel comas), con "col.names" o "row.names" indicamos los nombres de columnas y filas que queremos escribir, con "na.strings" podemos indicar qué valor o carácter va a especificar los valores ausentes o NA.

Ejemplo 1. Con las funciones write.table() y read.table()

> #creamos los datos que queremos guardar
> x <- data.frame(a = "Hola", b = 2.45)

> # podemos guardar nuestros datos 
> write.table(x, file = "Ejemplo1.txt", row.names = FALSE) # guarda un archivo txt
> write.csv(x, file = "Ejemplo1.csv", row.names = FALSE) # guarda un archivo csv
> write.table(x, file = "Ejemplo1.xls", row.names = FALSE) # guarda un archivo excel

> # elimina el objeto "x" 
> rm(x)

> # para leer los datos anteriores
> y <- read.table("Ejemplo1.txt", header=TRUE) # lee un archivo txt
> y= read.csv("Ejemplo1.csv",header = TRUE) # lee un archivo csv
> y <- read.table("Ejemplo1.xls", header=TRUE) # lee un archivo xls

> y 
     a    b
1 Hola 2.45

> str(y) # comprueba que los datos se han guardado/leído correctamente y mantienen el formato
'data.frame':    1 obs. of  2 variables:
$ a: Factor w/ 1 level "Hola": 1
$ b: num 2.45

En el caso de que los decimales estén determinados por una coma, debemos especificarlo en R (argumento dec=","), ya que R lee los decimales con puntos.

NOTA: Hay que recordar que si trabajas con RStudio tienes la opción de leer datos csv o txt fácilmente desde la barra de herramientas, en la ventana superior derecha "Import dataset".

ÚLTIMAS PLAZAS EN MASTERS

Máster Data Science

CONVOCATORIA ABIERTA I Logra la máxima precisión y rigor en tus proyectos de Ciencia de Datos.

Ver convocatorias 2022

MAster en MAchine learning

CONVOCATORIA ABIERTA | Automatiza procesos y crea tus propios algoritmos de Machine Learning.

Ver convocatorias 2022
 

Desde Excel (.xls o .xlsx)


Podemos utilizar el paquete "xlsx" con el siguiente formato:

  • Para guardar datos:
write.xlsx(x, file, sheetName="Sheet1", col.names=TRUE, row.names=TRUE, append=FALSE)

Para leer datos:

read.xlsx(file, sheetIndex, header=TRUE, colClasses=NA)

donde "x" es el objeto que queremos escribir (en formato matriz o data.frame), en "file" especificamos la ruta y nombre del documento que deseamos abrir/guardar, "sheetName" y "sheetInde" sirven para especificar el nombre y número de pestaña al que queremos acceder, respectivamente, con "col.names" o "row.names" indicamos los nombres de columnas y filas que queremos escribir, "append" nos permite agregar una pestaña a un archivo excel ya existente, con "header" indicamos si lee la primer fila como los nombres de las variables y con "colClasses" podemos especificar el tipo de variable que queremos asignar a cada columna.

Ejemplo 2. Con las funciones write.xlsx() y read.xlsx()

> # instalamos el paquete "xlsx"
> install.packages("xlsx")

> # activamos la librería "xlsx"
> library(xlsx)

> # guardamos los datos USArrests (vienen instalados por defecto en R) en un archivo Excel (.xlsx)
> write.xlsx(USArrests, file="Ejemplo2.xlsx", sheetName="USA", append=FALSE)
> # agregamos una pestaña con los datos mtcars (también se encuentran disponibles en R)
> write.xlsx(mtcars, file="Ejemplo2.xlsx", sheetName="MTCARS",  append=TRUE)
 
> # leemos los datos generados anteriormente
> D1<-read.xlsx("Ejemplo2.xlsx", sheetName = "USA")
> D2<-read.xlsx2("Ejemplo2.xlsx", sheetName = "MTCARS")

NOTA: también existen funciones que exportan los datos en formato SPSS, SAS o Stata.

2. Guardar objetos (datos o funciones) en formato .RData

  • save() podemos guardar todos o algunos de los objetos generados en R. save.image() es una opción rápida para guardar todo el área de trabajo de R (‘save my current workspace’), i.e. save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv). Y es lo que realizamos cuando escribimos:  q("yes") para salir de R y guardar el área de trabajo.
  • load() permite reanudar una sesión anterior cargando los objetos guardados previamente.

Ejemplo 3. Con las funciones save() y load().

> a=function(x){mean(x)}
> b="hola"
> c=1:5
> d=data.frame(a = 1, b = "a")

> # guarda los objetos en un archivo de datos de R
> save(a,b,c,d,file="Ejemplo.RData”)

> # eliminar los datos del área de trabajo
> rm(a, b, c, d)

> # lee el archivo de datos de R en tu área de trabajo
> load("Ejemplo.RData”) 

> a
function(x){mean(x)}

> b
[1] "hola"

> c
[1] 1 2 3 4 5

> d
  a b
1 1 a

> str(a)
function (x)  
- attr(*, "srcref")=Class 'srcref'  atomic [1:8] 1 3 1 22 3 22 1 1
  .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x10471c358>

> str(b)
chr "hola"

> str(c)
int [1:5] 1 2 3 4 5

> str(d)
'data.frame':    1 obs. of  2 variables:
$ a: num 1
$ b: Factor w/ 1 level "a": 1

3. Guardar objetos (datos o funciones) con sus metadatos 

Escrito en el formato nativo de R, crea una representación más descriptiva de un objeto R. Útil cuando queremos editar luego el texto porque conservan los metadatos -por ejemplo guarda la información de cada clase de las variables o los niveles de los factores- a diferencia de los formatos anteriores, tiene la desventaja de que son algo ilegibles y poco eficientes -ocupan más espacio-. En algunos casos, es preferible tener datos almacenados en un archivo CSV y luego tener un archivo de código separado que especifique los metadatos.  Disponible en las funciones:

  • dump() pueden guardar los contenidos de una función u otro objeto en un archivo externo
  • sink() guarda el resultado que normalmente se muestra en la consola en un archivo externo
  • source() para leer la información que has guardado previamente.

Ejemplo 4. Con las funciones dump(), sink() y source()

Los argumentos de la función dump() son una lista de objetos que queremos guardar y el nombre del archivo que queremos generar (y podemos especificar la ruta que indique el directorio donde guardarlo).También podemos especificar los argumentos append (TRUE si ya existe un archivo con el mismo nombre va a agregar la información al archivo anterior, lo sobreescribe; por defecto está seleccionado como FALSE), control y evaluate (para especificar el modo en que se guardan) y envir(si queremos especificar dónde se encuentra el objeto que queremos guardar). Para más información leer la ayuda ?dump.

> a=function(x){mean(x)}
> a=function(x){mean(x)}
> b="hola"
> c=1:5
> d=data.frame(a = 1, b = "a")

> # guarda los objetos en un archivo de datos de R
> dump(c("a","b","c","d"),file="Ejemplo.R”)

> # eliminar los datos del área de trabajo
> rm(a, b, c, d) 


> # guarda los objetos en un archivo de datos txt
> sink("Datos.txt") 
> x <- c(1, 12, 3, 0)
> summary(x) # no muestra los resultados pero los guarda en el fichero txt
> sink()


> # lee el archivo de datos de R en tu área de trabajo
> source("Ejemplo.R")

> a
function(x){mean(x)}

> b
[1] "hola"

> c
[1] 1 2 3 4 5

> d
  a b
1 1 a

> str(a)
function (x)  
- attr(*, "srcref")=Class 'srcref'  atomic [1:8] 2 1 2 20 1 20 2 2
  .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x10b70a8b0>

> str(b)
chr "hola"

> str(c)
int [1:5] 1 2 3 4 5

> str(d)
'data.frame':    1 obs. of  2 variables:
$ a: num 1
$ b: Factor w/ 1 level "a": 1

NOTA: Personalmente prefiero utilizar save/load en lugar de dump/source para trabajar con objetos, porque es más sencilla (dump() no es tan agradable y ocupa más espacio con los metadatos).

4. Guardar gráficos (.jpg, .png, .tiff, .bmp, .pdf)

Podemos guardar nuestros gráficos en distintos formatos.

  • Para crear un archivo de formato gráfico (.jpg, .png, .tiff, .bmp)
jpeg(filename = "Rplot%03d.jpeg", width = 480, height = 480, units = "px", pointsize = 12, quality = 75, bg = "white", res = NA, ..., type = c("cairo", "Xlib", "quartz"), antialias)

con "filename" indicamos el nombre (y ruta) del archivo, con "width" y "height" indicamos el ancho y largo del gráfico, respectivamente, con "units" podemos especificar las unidades en que estamos dando el tamaño del gráfico, "pointsize" indica el tamaño del texto que graficamos, "bg" indica el color de fondo de la imagen, "quality" la calidad de la imagen JPEG como % (con valores pequeños obtenemos mayor comprensión pero la imagen empeora), "compression" indica el tipo de compresión utilizada (siempre que no utilicemos type="quartz"), "res" es la resolución en ppi, "type" el tipo de archivo ("Xlib", "quartz" o "cairo").

  • Para crear un pdf con la imagen (mantiene una alta calidad)
  • pdf(file = if(onefile) "Rplots.pdf" else "Rplot%03d.pdf", width, height, onefile, family, title, fonts, paper, bg, fg, pointsize, pagecentre, colormodel, ...)

    donde "file" indica el nombre y ruta del archivo que vamos a guardar, "width" y "height" indican el ancho y largo del gráfico, "online" se utiliza para especificar si queremos varias figuras en un único archivo (con TRUE), "family" nos permite especificar la familia de la fuente de texto que utilizaremos, "title" para indicar un título, "fonts" para especificar la familia de la fuente utilizada para fuentes adicionales (por defecto Helvetica), "paper" indica el tamaño del papel ("a4", "letter", "legal", "executive", etc.) , "bg" y "fg" para el color de fondo capa, respectivamnte, "pointsize" especifica el tamaño de los puntos (por defecto 12), "colormodel" la configuración de color ("srgb" -por defecto-, "gray" o "cmyk").

    Ejemplo 5. Con las funciones jpeg, png, pdf

    > # guardar un archivo en formato jpg
    > jpeg('Grafico1.jpg') #abre el gráfico con el nombre dado (se guardará en el directorio seleccionado)
    > plot(1:10) #grafica una secuencia de números del 1 al 10
    > dev.off() #cierra el gráfico
    
    > # guardar un archivo en formato png
    > png('Grafico1.png') #abre el gráfico con el nombre dado (se guardará en el directorio seleccionado)
    > plot(1:10) #grafica una secuencia de números del 1 al 10
    > dev.off() #cierra el gráfico
    
    > # guardar un archivo en formato pdf
    > pdf("Grafico1.pdf")
    > plot(1:10) #grafica una secuencia de números del 1 al 10
    > dev.off() #cierra el gráfico

    NOTA: también existe la función bmp() y tiff().

    ¡Saludos!

    0 comentarios

    ¹ Todos los campos son obligatorios.
    ² Tu correo electrónico no será publicado.

    Nadie ha publicado ningún comentario aún. ¡Se tu la primera persona!

    Te llamamos

    Introduce los siguientes datos y nos pondremos en contacto contigo para atender tus dudas sin compromiso.

    Te llamamos

    Muchas gracias por solicitar información.
    Te contactaremos lo antes posible.

    Diseño web: Albin Soft.