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()
.
<- read.table("www/data/mtcars.csv", dec=".",sep=",", header=TRUE) mtcars
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.
<- read.csv("www/data/mtcars.csv") mtcars
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 textoNA
.
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()
.
<- read.fwf("www/data/fwf-sample.txt", widths=c(20,10,12)
fwf_sample 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)
<- read_excel("www/data/data.xlsx") data
Leer SPSS
library(foreign)
<-read.spss("http://psych.colorado.edu/~carey/Courses/PSYC7291/DataSets/SPSS/crime.sav", to.data.frame =TRUE, use.value.labels = TRUE) data
Recuerda que también puedes utilizar load
y save
para leer y escribir objetos de R.