5 Basics - Data types, import and export data

5.1 Data types

5.1.1 Data Frames

Los data frames nos permiten trabajar en el familiar formato de “hoja excel,” combinando números, texto, etc. en la misma tabla.

5.1.2 Matrices

Cuando trabajamos únicamente con datos numéricos, las matrices son el método más rápido.

5.1.3 Listas

Las listas son una manera de almacenar datos muy potente pero cuya exploración puede resultar algo complicada. A continuación de puede ver una manera de visualizar interactivamente el contenido de una lista compleja.

if (!require('repurrrsive')) install.packages('repurrrsive'); library('repurrrsive')
# listviewer::jsonedit(got_chars)

El paquete repurrrsive de Jenny Bryan, contiene algunas listas para usar como ejemplos. Ver su Github para más detalles, o mejor, su página web. Ésta contiene varios tutoriales muy interesantes.

5.2 Import data

5.2.1 From CSV file


Vamos a usar la siguiente base de datos.


Tras descargar el archivo de arriba, lo moveremos a nuestro directorio de trabajo ‘R workshop’. Una vez ahí, podemos usar alguna de las siguientes funciones para leer el archivo:

  • read_csv() - comma separated values
  • read_csv2() - semicolon separated values
  • read_delim( , delim = "|") - values separated by an arbitrary delimiter
# Cargamos librerias
if (!require('readr')) install.packages('readr'); library('readr')

# Establecemos directorio de trabajo
# setwd("R workshop")

#Importar los datos
datos = read_csv("Data/04-Data_types_import_export/Import_CSV.csv")
    
#Muestra las primeras 10 observaciones
datos
## # A tibble: 103 x 8
##       X1    ID Genero  Edad Educacion FollowUP condition PPV_DECLARED
##    <dbl> <dbl>  <dbl> <dbl>     <dbl>    <dbl> <chr>            <dbl>
##  1     4 41904      1    47         8       80 PPV_Cond1           99
##  2     5 95041      2    21         6       90 PPV_Cond1           99
##  3     6 74594      2    29         6       10 PPV_Cond1           99
##  4    15 72903      2    27         7       75 PPV_Cond1            1
##  5    16 21260      1    29         5       35 PPV_Cond1           24
##  6    18 50315      2    28         6       14 PPV_Cond1           99
##  7    19 21774      2    27         4        2 PPV_Cond1           99
##  8    20 20881      2    55         6       89 PPV_Cond1           99
##  9    21 39751      2    28         6        6 PPV_Cond1           99
## 10    22 99384      1    46         5        0 PPV_Cond1            1
## # … with 93 more rows

En el panel ‘Environment’ veremos que aparece datos:

Haciendo click en datos abrimos una pestaña donde podemos ver el contenido de ese data frame. También podemos visualizarlo usando el codigo View(datos)

5.2.2 From XLS’ file (Excel)


Vamos a usar la siguiente base de datos.


# Cargamos librerias
if (!require('readxl')) install.packages('readxl'); library('readxl')

# Establecemos directorio de trabajo
# setwd("R workshop")

#Importar los datos
datos = read_excel("Data/04-Data_types_import_export/Import_XLS.xls")
    
#Muestra las primeras 10 observaciones
datos
## # A tibble: 237 x 13
##     name wais_voc boston moral_02i moral_20p minisea_caras eqscore   sex   age
##    <dbl>    <dbl>  <dbl>     <dbl>     <dbl>         <dbl>   <dbl> <dbl> <dbl>
##  1     1       34     28         1         1            29      63     0    62
##  2     2       13     23        NA         0            23      55     0    53
##  3     3       20     16         1         1            26      27     0    18
##  4     4       24     23         1         1            21      33     0    40
##  5     5       20     24         1         1            18      35     1    65
##  6     6        2      3         0         0            23      38    NA    NA
##  7     7       13     15         1        NA            19      38     0    56
##  8     8       27     18         1         0            15      42     1    70
##  9     9       37     28         1         0            23      36     0    43
## 10    10       27     24         0         0            20      51     1    52
## # … with 227 more rows, and 4 more variables: wais_mp <dbl>, eyes <dbl>,
## #   sass_score <dbl>, ifs_score <dbl>

5.2.3 From SAV file (SPSS)


Vamos a usar la siguiente base de datos.


# Cargamos librerias
if (!require('haven')) install.packages('haven'); library('haven')

# Establecemos directorio de trabajo
# setwd("R workshop")


#Importar los datos
datos = read_sav("Data/04-Data_types_import_export/Import_SAV.sav")
    
#Muestra las primeras 10 observaciones
datos
## # A tibble: 237 x 13
##       ID wais_voc boston moral_02i moral_20p minisea_caras eqscore   sex   age
##    <dbl>    <dbl>  <dbl>     <dbl>     <dbl>         <dbl>   <dbl> <dbl> <dbl>
##  1     1       34     28         1         1            29      63     0    62
##  2     2       13     23        NA         0            23      55     0    53
##  3     3       20     16         1         1            26      27     0    18
##  4     4       24     23         1         1            21      33     0    40
##  5     5       20     24         1         1            18      35     1    65
##  6     6        2      3         0         0            23      38    NA    NA
##  7     7       13     15         1        NA            19      38     0    56
##  8     8       27     18         1         0            15      42     1    70
##  9     9       37     28         1         0            23      36     0    43
## 10    10       27     24         0         0            20      51     1    52
## # … with 227 more rows, and 4 more variables: wais_mp <dbl>, eyes <dbl>,
## #   sass_score <dbl>, ifs_score <dbl>

5.2.4 Import all files from a folder


Vamos a usar los siguientes archivos. Tendrás que descomprimirlos en una carpeta antes de usarlos.


5.2.4.1 Using purrr

From: https://gist.github.com/ColinFay/d74d331825868b181860212cd1577b69 by @_ColinFay

if (!require('purrr')) install.packages('purrr'); library('purrr')
if (!require('readr')) install.packages('readr'); library('readr')
if (!require('dplyr')) install.packages('dplyr'); library('dplyr')

files <- list.files("Data/04-Data_types_import_export/CSVs", pattern = "^0", full.names = TRUE)
full <- map_df(files, read_csv)
dplyr::glimpse(full)
## Rows: 1,200
## Columns: 9
## $ Sex       <chr> "male", "male", "male", "male", "male", "male", "male", "mal…
## $ Priming   <chr> "Collective", "Collective", "Collective", "Collective", "Col…
## $ trialN    <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1…
## $ Block     <chr> "we", "we", "we", "we", "we", "we", "we", "we", "we", "we", …
## $ Adjective <chr> "ofensivo", "resentido", "ego�sta", "indiscreto", "sumiso", …
## $ Valence   <chr> "negative", "negative", "negative", "negative", "negative", …
## $ Answer    <chr> "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "yes"…
## $ Arrow     <chr> "left", "right", "left", "left", "left", "left", "left", "le…
## $ rT        <dbl> 623, 1235, 335, 355, 618, 328, 348, 1620, 346, 778, 316, 158…
# Including filenames in a column 
files <- list.files("Data/04-Data_types_import_export/CSVs", pattern = "^0", full.names = TRUE) %>% 
  set_names(basename(.))
full2 <- map_df(files, read_csv, .id = "file")
full2
## # A tibble: 1,200 x 10
##    file   Sex   Priming    trialN Block Adjective  Valence  Answer Arrow    rT
##    <chr>  <chr> <chr>       <dbl> <chr> <chr>      <chr>    <chr>  <chr> <dbl>
##  1 01.csv male  Collective      1 we    ofensivo   negative yes    left    623
##  2 01.csv male  Collective      2 we    resentido  negative no     right  1235
##  3 01.csv male  Collective      3 we    ego�sta    negative yes    left    335
##  4 01.csv male  Collective      4 we    indiscreto negative yes    left    355
##  5 01.csv male  Collective      5 we    sumiso     negative yes    left    618
##  6 01.csv male  Collective      6 we    agradable  positive yes    left    328
##  7 01.csv male  Collective      7 we    clasista   negative yes    left    348
##  8 01.csv male  Collective      8 we    altruista  positive yes    left   1620
##  9 01.csv male  Collective      9 we    ansioso    negative yes    left    346
## 10 01.csv male  Collective     10 we    presumido  negative yes    left    778
## # … with 1,190 more rows
# vroom::vroom(files)

5.2.4.2 Traditional way

if (!require('purrr')) install.packages('purrr'); library('purrr')
if (!require('readr')) install.packages('readr'); library('readr')
if (!require('dplyr')) install.packages('dplyr'); library('dplyr')


# We list all files in the desired folder
Path_Folder = "Data/04-Data_types_import_export/CSVs/"
file.list <- paste0(Path_Folder, list.files(Path_Folder)); file.list
## [1] "Data/04-Data_types_import_export/CSVs/01.csv"  
## [2] "Data/04-Data_types_import_export/CSVs/02.csv"  
## [3] "Data/04-Data_types_import_export/CSVs/03.csv"  
## [4] "Data/04-Data_types_import_export/CSVs/CSVs.zip"
# Method 1

# Read and bind all of them
    # We can use the function read_csv or any other
df = lapply(file.list, read_csv) %>% 
  bind_rows(.id = "ID")

df
## # A tibble: 1,600 x 10
##    ID    Sex   Priming    trialN Block Adjective  Valence  Answer Arrow    rT
##    <chr> <chr> <chr>       <dbl> <chr> <chr>      <chr>    <chr>  <chr> <dbl>
##  1 1     male  Collective      1 we    ofensivo   negative yes    left    623
##  2 1     male  Collective      2 we    resentido  negative no     right  1235
##  3 1     male  Collective      3 we    ego�sta    negative yes    left    335
##  4 1     male  Collective      4 we    indiscreto negative yes    left    355
##  5 1     male  Collective      5 we    sumiso     negative yes    left    618
##  6 1     male  Collective      6 we    agradable  positive yes    left    328
##  7 1     male  Collective      7 we    clasista   negative yes    left    348
##  8 1     male  Collective      8 we    altruista  positive yes    left   1620
##  9 1     male  Collective      9 we    ansioso    negative yes    left    346
## 10 1     male  Collective     10 we    presumido  negative yes    left    778
## # … with 1,590 more rows
# Method 2
df = do.call(rbind, lapply(file.list, function(x) read_csv(x)))
      #%>% select(Rut, Nota, Prueba))) # We can add this if we have a set of common columns

df
## # A tibble: 1,600 x 9
##    Sex   Priming    trialN Block Adjective  Valence  Answer Arrow    rT
##    <chr> <chr>       <dbl> <chr> <chr>      <chr>    <chr>  <chr> <dbl>
##  1 male  Collective      1 we    ofensivo   negative yes    left    623
##  2 male  Collective      2 we    resentido  negative no     right  1235
##  3 male  Collective      3 we    ego�sta    negative yes    left    335
##  4 male  Collective      4 we    indiscreto negative yes    left    355
##  5 male  Collective      5 we    sumiso     negative yes    left    618
##  6 male  Collective      6 we    agradable  positive yes    left    328
##  7 male  Collective      7 we    clasista   negative yes    left    348
##  8 male  Collective      8 we    altruista  positive yes    left   1620
##  9 male  Collective      9 we    ansioso    negative yes    left    346
## 10 male  Collective     10 we    presumido  negative yes    left    778
## # … with 1,590 more rows

5.2.5 Import files using RStudio


Vamos a usar la siguiente base de datos.


A partir de la version 1.0 de RStudio podemos importar archivos de datos usando la interfaz gráfica - Panel Environment > Import Dataset, arriba a la derecha. En cualquier caso, para que lo que hacemos sea reproducible, es recomendable trabajar con código.

5.3 Export data

5.3.1 Export data to CSV file

# Carga libreria
if (!require('readr')) install.packages('readr'); library('readr')

# Volcamos datos a archivo
write_csv(datos, "Data/04-Data_types_import_export/Export_saved_file.csv")