Guardando datos

Hoja de ruta

Leccion: 10 min
Prácticas: 10 min
Preguntas
  • ¿Cómo puedo guardar gráficas y datos creados en R?

Objetivos
  • Ser capaz de guardar gráficas y datos desde R.

Guardando gráficas

Ya has visto como guardar la más reciente gráfica que creaste en ggplot2 usando el comando ggsave. A manera de recuerdo:

ggsave("My_most_recent_plot.pdf")

Puedes guardar una gráfica desde Rstudio usando el botón de ‘Export’ en la ventana de ‘Plot’. Esto te dará la opción de guardarla como .pdf, .png, .jpg u otros formatos de imágenes.

Algunas veces podrías querer guardar las gráficas sin primero desplegarlas en la ventana de ‘Plot’. Quizá quieras hacer un documento pdf con varias páginas: por ejemplo, cada una con una gráfica distinta. O quizá tu estás iterando sobre distintos subconjuntos de un archivo, graficando los datos de cada subconjunto y quieres guardar cada una de las gráficas, obviamente no puedes detener la iteración en cada paso para dar clic en ‘Export’ para cada una.

En este caso quieres usar un método más flexible. La función pdf crea un nuevo dispositivo pdf. Puedes controlar el tamaño y la resolución usando argumentos para esta función.

pdf("Life_Exp_vs_time.pdf", width=12, height=4)
ggplot(data=gapminder, aes(x=year, y=lifeExp, colour=country)) +
  geom_line() +
  theme(legend.position = "none") 

# ¡Tienes que asegurarte de apagar el dispositivo pdf!

dev.off()

Abre este documento y echa un vistazo.

Desafío 1

Vuelve a escribir el comando ‘pdf’ para imprimir una segunda página en el pdf, mostrando una gráfica facet (sugerencia: usa facet_grid) de los mismos datos con un panel por continente.

Solution to challenge 1

Solución al desafío 1

pdf("Life_Exp_vs_time.pdf", width = 12, height = 4)
p <- ggplot(data = gapminder, aes(x = year, y = lifeExp, colour = country)) +
  geom_line() +
  theme(legend.position = "none")
p
p + facet_grid(. ~continent)
dev.off()

Los comandos jpeg, png, etc. son usados de manera similar para producir documentos en los correspondientes formatos.

Guardando datos

En algún momento, también querrás guardar datos desde R.

Podemos usar la función write.table para esto, ésta es muy similar a la función read.table que se presentó anteriormente.

Vamos a crear un script para limpiar datos, para este análisis, vamos a enfocarnos solamente en los datos de gapminder para Australia:

aust_subset <- gapminder[gapminder$country == "Australia",]

write.table(aust_subset,
  file="cleaned-data/gapminder-aus.csv",
  sep=","
)

Ahora regresemos a la terminal para dar un vistazo a los datos para asegurarnos que se vean bien:

head cleaned-data/gapminder-aus.csv
"country","year","pop","continent","lifeExp","gdpPercap"
"61","Australia",1952,8691212,"Oceania",69.12,10039.59564
"62","Australia",1957,9712569,"Oceania",70.33,10949.64959
"63","Australia",1962,10794968,"Oceania",70.93,12217.22686
"64","Australia",1967,11872264,"Oceania",71.1,14526.12465
"65","Australia",1972,13177000,"Oceania",71.93,16788.62948
"66","Australia",1977,14074100,"Oceania",73.49,18334.19751
"67","Australia",1982,15184200,"Oceania",74.74,19477.00928
"68","Australia",1987,16257249,"Oceania",76.32,21888.88903
"69","Australia",1992,17481977,"Oceania",77.56,23424.76683

Mmm, eso no era precisamente lo que queríamos. ¿De dónde vinieron todas esas comillas?. También los números de línea no tienen ningún sentido.

Veamos el archivo de ayuda para investigar como podemos cambiar este comportamiento.

?write.table

Por omisión los vectores character se ponen entre comillas cuando se guarda en un archivo. También se guardan los nombres de los renglones y las columnas.

Arreglemos esto:

write.table(
  gapminder[gapminder$country == "Australia",],
  file="cleaned-data/gapminder-aus.csv",
  sep=",", quote=FALSE, row.names=FALSE
)

Ahora echemos de nuevo un vistazo a los datos usando nuestras habilidades en la terminal:

head cleaned-data/gapminder-aus.csv
country,year,pop,continent,lifeExp,gdpPercap
Australia,1952,8691212,Oceania,69.12,10039.59564
Australia,1957,9712569,Oceania,70.33,10949.64959
Australia,1962,10794968,Oceania,70.93,12217.22686
Australia,1967,11872264,Oceania,71.1,14526.12465
Australia,1972,13177000,Oceania,71.93,16788.62948
Australia,1977,14074100,Oceania,73.49,18334.19751
Australia,1982,15184200,Oceania,74.74,19477.00928
Australia,1987,16257249,Oceania,76.32,21888.88903
Australia,1992,17481977,Oceania,77.56,23424.76683

¡Esto se ve mejor!

Desafío 2

Escribe un script de limpieza de datos que filtre los datos de gapminder que fueron colectados desde 1990.

Usa este script para guardar este nuevo subconjunto de datos en el directorio cleaned-data.

Solución al desafío 2

write.table(
  gapminder[gapminder$year > 1990, ],
  file = "cleaned-data/gapminder-after1990.csv",
  sep = ",", quote = FALSE, row.names = FALSE
)

Puntos Clave

  • Guardar gráficas desde RStudio usando el botón de ‘Export’.

  • Usar write.table para guardar datos tabulares.