Capítol 4 Lectura escritura

A continuación, se presentan las funciones para la lectura/escritura de datos, cruce y construcción de tablas resumen.

4.1 Datos de texto

RStudio aporta facilidades para la importación de datos a través del menú: File -> Import Data set -> From Text...

No obstante lo más habitual es importar a través de código.

Lectura texto con separador

Para leer el siguiente fichero de texto:

library(knitr)
library(pander)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
cat(paste0(readLines("www/data/mtcars.csv", n = 6), collapse="\n"))
## "mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"
## 21,6,160,110,3.9,2.62,16.46,0,1,4,4
## 21,6,160,110,3.9,2.875,17.02,0,1,4,4
## 22.8,4,108,93,3.85,2.32,18.61,1,1,4,1
## 21.4,6,258,110,3.08,3.215,19.44,1,0,3,1
## 18.7,8,360,175,3.15,3.44,17.02,0,0,3,2

Dado que se trata de un fichero con un carácter separado, la función genérica para teste tipo de ficheros es read.table().

mtcars <- read.table("www/data/mtcars.csv", dec=".",sep=",", header=TRUE)

Los parámetros especificados son:

  • dec: El separador decimal. En Europa se acostumbra a utilizar la coma “,”
  • sep: El separador de columnas. Es habitual usar también “;” y “\t” cuando es un tabulador.
  • header: Indica si la primera fila contiene el nombre de las variables o no.

También es común el uso de fileEncoding="Latin1" cuando el fichero se ha creado con Windows y utiliza caracteres especiales de texto (tildes, …).

Dada la estructura del fichero, con read.csv() la carga es más simple.

mtcars <- read.csv("www/data/mtcars.csv")

Cuando el csv es europeo, “,” decimal y “;” como separador, se utiliza read.csv2().

Es una buena práctica verificar su carga con dim(), head() y summary().

dim(mtcars)
## [1] 32 11
kable(head(mtcars))
mpg cyl disp hp drat wt qsec vs am gear carb
21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
kable(summary(mtcars))
mpg cyl disp hp drat wt qsec vs am gear carb
Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0 Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000 Min. :0.0000 Min. :3.000 Min. :1.000
1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
Median :19.20 Median :6.000 Median :196.3 Median :123.0 Median :3.695 Median :3.325 Median :17.71 Median :0.0000 Median :0.0000 Median :4.000 Median :2.000
Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7 Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375 Mean :0.4062 Mean :3.688 Mean :2.812
3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0 Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000 Max. :1.0000 Max. :5.000 Max. :8.000

Escritura texto con separador

Para la escritura, puedes utilizar sus equivalentes: write.table(), write.csv(), write.csv2(). Cabe destacar algunas pequeñas variaciones.

write.csv2(mtcars, file="www/temp/mtcars2.csv", row.names=FALSE, na="")
  • row.names: Si no se especifica, por defecto, se inserta el número de fila.
  • na: Si no se especifica, introduce el texto NA.

Observa como el nuevo csv ahora tiene el formato de csv europeo.

cat(paste0(readLines("www/temp/mtcars2.csv", n = 6), collapse="\n"))
## "mpg";"cyl";"disp";"hp";"drat";"wt";"qsec";"vs";"am";"gear";"carb"
## 21;6;160;110;3,9;2,62;16,46;0;1;4;4
## 21;6;160;110;3,9;2,875;17,02;0;1;4;4
## 22,8;4;108;93;3,85;2,32;18,61;1;1;4;1
## 21,4;6;258;110;3,08;3,215;19,44;1;0;3;1
## 18,7;8;360;175;3,15;3,44;17,02;0;0;3;2

Texto con ancho fijo

Veamos un ejemplo de fichero de ancho fijo:

cat(paste0(readLines("www/data/fwf-sample.txt", n = 6), collapse="\n"))
## John Smith          WA        418-Y11-4111
## Mary Hartford       CA        319-Z19-4341
## Evan Nolan          IL        219-532-c301

Para leer texto de ancho fijo, se utiliza read.fwf().

fwf_sample <- read.fwf("www/data/fwf-sample.txt", widths=c(20,10,12)
                     , col.names=c("name", "state", "ssn"))
  • widths: Son los anchos de cada variable.
  • col.names: Nombres de las variables.
kable(fwf_sample)
name state ssn
John Smith WA 418-Y11-4111
Mary Hartford CA 319-Z19-4341
Evan Nolan IL 219-532-c301

4.2 Otros formatos

Leer Excel

library(readxl)
data <- read_excel("www/data/data.xlsx")

Leer SPSS

library(foreign)
data<-read.spss("http://psych.colorado.edu/~carey/Courses/PSYC7291/DataSets/SPSS/crime.sav", to.data.frame =TRUE, use.value.labels = TRUE)

Recuerda que también puedes utilizar load y save para leer y escribir objetos de R.