Repaso de escritura con R Markdown

Paso 1: Creamos un nuevo proyecto (dentro de la carpeta “R”)

Menú File > 
  New Proyect > 
  New Directory > 
  New Proyect > 
  Elegir nombre y ubicación > 
  Create project
  Nombre: repaso_01

Paso 2: Creamos un nuevo archivo R Markdown

Menú File > 
  New File > 
  R Markdown > 
    Author: Tu nombre
    Title: Repaso de escritura
    

Paso 4: Hacer Knit al documento con output HTML

Paso 5: Publicar el documento en Rpubs.com y compartir el enlace en el chat grupal

Importación de datos

Recuerda el primer paso

Paso 1: Creamos un nuevo proyecto (dentro de la carpeta “R”)

Menú File > 
  New Proyect > 
  New Directory > 
  New Proyect > 
  Elegir nombre y ubicación
    Nombre: sesion2
    Ubicacion: Carpeta R > 
  Create project
  

Dentro de la carpeta del proyecto, creamos una carpeta llamada “data”. Puedes hacer lo desde el visor de archivos de RStudio (“Files”) o desde tu explorador de archivos cotidiano.

Para comprobar que llegaste hasta aquí, ejecuta el siguiente código en la consola y copia el resultado en el chat grupal.

dir()

Material a utilizar

La data a importar en la práctica se encuentra en una carpeta de Google Drive para su descarga. No olvides ubicar todos los archivos descargados dentro de la carpeta “data” de tu proyecto.

Ahora deberías contar con todos estos archivos en tu carpeta “data”.

archivos
09_UNIVERSIDADES_CARATULA.SAV
gapminder_comas.csv
gapminder_comas2.txt
gapminder_excel_col_names.xlsx
gapminder_excel_sheet.xlsx
gapminder_excel_skip.xlsx

archivos
gapminder_excel.xlsx
gapminder_guiones.txt
gapminder_michi.txt
gapminder_slash.txt
gapminder_tabs.tsv

Para comprobar que todo está bien, ejecuta el siguiente código en la consola y copia el resultado en el chat grupal.

dir("data")

Paquetes necesarios

Existen paquetes especializados para cada tipo de datos que deseamos descargar. En esta oportunidad, aprenderemos a usar los siguientes.

  • readr: Para archivos de texto
  • readxl: Para archivos de Excel
  • haven: Para archivos de SPSS y Stata

Todos estos paquetes se descagaron cuando instalaste ´tidyverse´.

Recuerda

Fuera del mundo de la investigación académica, existen muchos tipos de formatos de almacenamiento de datos que están mejor optimizados para tareas específicas.

Una característica común de todos los paquetes presentados es que al leer los datos en R, se crean como tibbles, un formato de trabajo para datos tabulares que existe sólo en R. Además de ello, sus funciones comparten elementos en su interfaz (API), lo que permite trabajar con distintos tipos de datos realizando cambios mínimos.

Importación de archivos de texto

Cargando readr

Para acceder a las funciones de un paquete, siempre debemos primero cargarlo haciendo uso de library().

library(readr)

Esto nos permitirá tener acceso a las funciones y datos contenidos en el paquete.

En la carpeta “data” contamos con cinco tipos de archivos:

  • *.txt: Texto separado por un delimitador arbitrario.
  • *.tsv: Texto separado por tabulaciones
  • *.csv: Texto separado por comas
  • *.xlsx: Archivo de Excel
  • *.SAV: Archivo de SPSS

La función que nutre el núcleo de readr es read_delim(). Nos permitirá leer prácticamente todo tipo de archivos de texto siempre y cuando le indiquemos el tipo de delimitador.

Exploremos los archivos de texto en nuestra carpeta “data”.

gapminder_comas.csv

Los archivos de valores separados por comas (Comma Separated Values) son de los más utilizados en el mundo del análisis de datos debido a que prácticamente cualquier software puede reconocerlos.

Son archivos de texto que representan datos tabulares en los que los valores de cada columna están separados por comas.

Ver archivo original

Leer datos csv

Para leer estos archivos, usamos la función read_csv() del paquete readr.

read_csv("data/gapminder_comas.csv")

## Parsed with column specification:
## cols(
##   country = col_character(),
##   continent = col_character(),
##   year = col_double(),
##   lifeExp = col_double(),
##   pop = col_double(),
##   gdpPercap = col_double()
## )
## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # … with 1,694 more rows

Al ejecutar el código, obtenemos dos tipos de output. El primero nos indica que la lectura asignó a cada columna cierto tipo de datos. Este tipo de output es un simple mensaje (message).

El segundo output nos indica el objeto obtenido (un tibble), con la cantidad de filas y columnas que contiene. Además, nos brinda las diez primeras filas de la información obtenida, y el nombre y tipo de cada columna. Si este conjunto de datos tuviera más columnas, sólo se nos mostraría la cantidad de columnas que alcances en nuestra ventana.

Si deseamos usar los datos obtenidos para un análisis posterior, como probablemente sea el caso, es necesario almacenar la tabla generada haciendo uso del operador de asignación <-. El nombre indicado aparecerá en nuestro panel “Environment”.

datos_obtenidos_csv <- read_csv("data/gapminder_comas.csv")
## Parsed with column specification:
## cols(
##   country = col_character(),
##   continent = col_character(),
##   year = col_double(),
##   lifeExp = col_double(),
##   pop = col_double(),
##   gdpPercap = col_double()
## )

Vemos que volvemos a obtener el mensaje, pero esta vez no se nos muestran los datos. Esto sucede porque al asignarle un nombre, le hemos indicado a R que queremos acceder a los datos sólo cuando se lo indiquemos explícitamente. Para hacer ello, simplemente tipeamos el nombre que le asignamos al conjunto de datos.

datos_obtenidos_csv
## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # … with 1,694 more rows

En esta ocasión, sí obtenemos la información contenida en el conjunto de datos, pero no el mensaje. Esto sucede porque los mensajes sólo nos muestran información relevante al momento de ejecutar una función, como lo es read_csv().

Preguntas

  1. ¿De qué creen que se trata este conjunto de datos?
  2. ¿Cuál es la unidad de observación?

gapminder_tabs.tsv

Otra manera de almacenar datos es usando uso de archivos de valores separados por tabulaciones (Tab Separated Values)

Para leer estos archivos, hacemos uso de la función read_tsv().

datos_obtenidos_tsv <- read_tsv("data/gapminder_tabs.tsv")
## Parsed with column specification:
## cols(
##   country = col_character(),
##   continent = col_character(),
##   year = col_double(),
##   lifeExp = col_double(),
##   pop = col_double(),
##   gdpPercap = col_double()
## )

Nuevamente, la función nos comunica mediante un mensaje qué tipo de columnas ha identificado.

Podemos inspeccionar el contenido de este conjunto de datos del mismo modo anterior.

datos_obtenidos_tsv
## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # … with 1,694 more rows

read_delim()

Para archivos de texto con cualquier otro tipo de delimitador, usamos la función read_delim(), que además de solicitarnos la ubicación del archivo, nos pide especificar el delimitador que se usó para almacenar los datos.

Por ejemplo, inspeccionemos el archivo “gapminder_comas2.txt”

Vemos que es muy similar a los archivos anteriores, pero en este caso las columnas están separadas por punto y coma.

Para leer este archivo, hacemos uso de read_delim() indicando como separador el caracter adecuado.

datos_obtenidos_punto_y_coma <- read_delim("data/gapminder_comas2.txt", delim = ";")
## Parsed with column specification:
## cols(
##   country = col_character(),
##   continent = col_character(),
##   year = col_double(),
##   lifeExp = col_double(),
##   pop = col_double(),
##   gdpPercap = col_double()
## )

Ejercicio

Lee el resto de archivos .txt y asignales un nombre en tu “Environment”. Los archivos deben ser leídos cada uno en un bloque de código.

Para comprobar que lograste hacerlo, ejecuta el siguiente código y comparte el resultado en el chat grupal:

ls()
## [1] "datos_obtenidos_csv"          "datos_obtenidos_punto_y_coma"
## [3] "datos_obtenidos_tsv"

Descanso de 15 minutos

Lectura de datos excel

Para poder leer datos de excel, vamos a hacer uso del paquete readxl.

Recuerda que para cargar cualquier paquete, especificas su nombre sin comillas dentro de un llamado a la funcion library().

La función que nos permite leer archivos .xlsx es read_xlsx(). La usamos igual que en los casos anteriores.

## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # … with 1,694 more rows

Alternativamente, podemos usar la función read_excel(), que nos da el mismo resultado.

## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # … with 1,694 more rows

Lectura de archivos SPSS

Para leer archivos SPSS cargamos el paquete haven.

Como la extensión de los archivos es .sav podemos leerlos con la función read_sav().

## # A tibble: 122 x 8
##    SELECT UC0DD_CD UC0DD_DPTO UC0PP_CD UC0PP_PROV UC0DI_CD UC0DI_DIST   UC0P_OBS
##    <chr>  <chr>    <chr>      <chr>    <chr>      <chr>    <chr>        <chr>   
##  1 U0001  16       LORETO     01       MAYNAS     13       SAN JUAN BA… ""      
##  2 U0002  14       LAMBAYEQUE 03       LAMBAYEQUE 01       LAMBAYEQUE   ""      
##  3 U0003  15       LIMA       01       LIMA       40       SANTIAGO DE… ""      
##  4 U0004  15       LIMA       01       LIMA       13       JESUS MARIA  ""      
##  5 U0005  15       LIMA       01       LIMA       35       SAN MARTIN … ""      
##  6 U0006  15       LIMA       01       LIMA       40       SANTIAGO DE… ""      
##  7 U0007  15       LIMA       01       LIMA       21       PUEBLO LIBRE ""      
##  8 U0008  23       TACNA      01       TACNA      01       TACNA        ""      
##  9 U0009  10       HUANUCO    01       HUANUCO    01       HUANUCO      ""      
## 10 U0010  15       LIMA       01       LIMA       13       JESUS MARIA  ""      
## # … with 112 more rows

Alternativamente, podemos usar la función read_spss(), que nos da el mismo resultado.

## # A tibble: 122 x 8
##    SELECT UC0DD_CD UC0DD_DPTO UC0PP_CD UC0PP_PROV UC0DI_CD UC0DI_DIST   UC0P_OBS
##    <chr>  <chr>    <chr>      <chr>    <chr>      <chr>    <chr>        <chr>   
##  1 U0001  16       LORETO     01       MAYNAS     13       SAN JUAN BA… ""      
##  2 U0002  14       LAMBAYEQUE 03       LAMBAYEQUE 01       LAMBAYEQUE   ""      
##  3 U0003  15       LIMA       01       LIMA       40       SANTIAGO DE… ""      
##  4 U0004  15       LIMA       01       LIMA       13       JESUS MARIA  ""      
##  5 U0005  15       LIMA       01       LIMA       35       SAN MARTIN … ""      
##  6 U0006  15       LIMA       01       LIMA       40       SANTIAGO DE… ""      
##  7 U0007  15       LIMA       01       LIMA       21       PUEBLO LIBRE ""      
##  8 U0008  23       TACNA      01       TACNA      01       TACNA        ""      
##  9 U0009  10       HUANUCO    01       HUANUCO    01       HUANUCO      ""      
## 10 U0010  15       LIMA       01       LIMA       13       JESUS MARIA  ""      
## # … with 112 more rows

Lectura de datos con más argumentos

No siempre los datos estarán de antemano en un formato que nos permita leerlos automáticamente. En algunos casos, será necesario especificar argumentos adicionales al momento de leerlos.

Ejercicio

Intentar leer los datos de los archivos excel restantes.

Solución

Usar los argumentos adicionales:

  • skip
  • sheet
  • col_names

Uso de datos de paquetes instalados

Cuando se carga un paquete, el usuario tiene acceso a los set de datos contenidos en él. Podemos obtener un listado de los set de datos contenidos en un paquete usando la función datasets() del paquete vcdExtra.

## Loading required package: vcd
## Loading required package: grid
## Loading required package: gnm
## 
## Attaching package: 'vcdExtra'
## The following object is masked from 'package:dplyr':
## 
##     summarise

Por ejemplo, para conocer los conjuntos de datos del paquete ggplot2:

##              Item      class      dim
## 1        diamonds data.frame 53940x10
## 2       economics data.frame    574x6
## 3  economics_long data.frame   2870x4
## 4       faithfuld data.frame   5625x3
## 5     luv_colours data.frame    657x4
## 6         midwest data.frame   437x28
## 7             mpg data.frame   234x11
## 8          msleep data.frame    83x11
## 9    presidential data.frame     11x4
## 10          seals data.frame   1155x4
## 11      txhousing data.frame   8602x9
##                                                                Title
## 1                           Prices of over 50,000 round cut diamonds
## 2                                            US economic time series
## 3                                            US economic time series
## 4                           2d density estimate of Old Faithful data
## 5                                            'colors()' in Luv space
## 6                                               Midwest demographics
## 7  Fuel economy data from 1999 to 2008 for 38 popular models of cars
## 8       An updated and expanded version of the mammals sleep dataset
## 9                    Terms of 11 presidents from Eisenhower to Obama
## 10                                    Vector field of seal movements
## 11                                               Housing sales in TX

Si ya hemos cargado el paquete, basta con llamar al conjunto de datos usando su nombre.

## # A tibble: 53,940 x 10
##    carat cut       color clarity depth table price     x     y     z
##    <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
##  1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
##  2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
##  3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
##  4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
##  5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
##  6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
##  7 0.24  Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
##  8 0.26  Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
##  9 0.22  Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
## 10 0.23  Very Good H     VS1      59.4    61   338  4     4.05  2.39
## # … with 53,930 more rows

## # A tibble: 574 x 6
##    date         pce    pop psavert uempmed unemploy
##    <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
##  1 1967-07-01  507. 198712    12.6     4.5     2944
##  2 1967-08-01  510. 198911    12.6     4.7     2945
##  3 1967-09-01  516. 199113    11.9     4.6     2958
##  4 1967-10-01  512. 199311    12.9     4.9     3143
##  5 1967-11-01  517. 199498    12.8     4.7     3066
##  6 1967-12-01  525. 199657    11.8     4.8     3018
##  7 1968-01-01  531. 199808    11.7     5.1     2878
##  8 1968-02-01  534. 199920    12.3     4.5     3001
##  9 1968-03-01  544. 200056    11.7     4.1     2877
## 10 1968-04-01  544  200208    12.3     4.6     2709
## # … with 564 more rows

## # A tibble: 1,155 x 4
##      lat  long delta_long delta_lat
##    <dbl> <dbl>      <dbl>     <dbl>
##  1  29.7 -173.     -0.915   0.143  
##  2  30.7 -173.     -0.867   0.128  
##  3  31.7 -173.     -0.819   0.113  
##  4  32.7 -173.     -0.771   0.0980 
##  5  33.7 -173.     -0.723   0.0828 
##  6  34.7 -173.     -0.674   0.0675 
##  7  35.7 -173.     -0.626   0.0522 
##  8  36.7 -173.     -0.577   0.0369 
##  9  37.7 -173.     -0.529   0.0216 
## 10  38.7 -173.     -0.480   0.00635
## # … with 1,145 more rows

Escritura de archivos