En R hay decenas de maneras de importar datos tabulares desde distintas fuentes (Excel, bases de datos, SPSS, etc.) pero la más habitual consiste en leer ficheros de texto con la función read.table.
Existen muchas variantes de ficheros de texto: csv, ficheros separados con tabulador, con y sin encabezamientos, con distintos códigos para representar los nulos, etc. La función read.table es muy flexible y tiene muchos parámetros, casi demasiados, para adaptarse a la mayor parte de ellos10.
El directorio de trabajo es aquel en el que R busca y escribe ficheros por defecto. Las funciones getwd y setwd permiten, respectivamente, averiguar cuál es y cambiarlo si procede. De todos modos, la mejor manera de especificar el directorio de trabajo en RStudio es usando los menús: Files > More > Set as working directory.
getwd()
setwd(“..”) # “sube” al directorio padre del actual
setwd(“mi_proyecto/src”) # ruta relativa
setwd(“c:/users/yo/proyecto”) # ruta absoluta en Windows
setwd(“/home/yo/proyecto”) # ruta absoluta en Linux y otros
dir() # contenidos del directorio “de trabajo”
Una llamada típica a read.table para leer un fichero es así:
datos <- read.table(“data_dir/mi_fichero.csv”, sep = “, header = TRUE)
Examinénmosla:
datos es el nombre de la tabla que recibirá la información leída por read.table; de no hacerse la asignación, R se limitará a imprimirlos en la consola.
“data_dir/mi_fichero.csv” (¡entrecomillado!) es la ruta del fichero de interés. Se trata de una ruta relativa al directorio de trabajo, que se supone que contiene el subdirectorio data_dir y, dentro de él, el fichero mi_fichero.csv.
sep = “indica que los campos del fichero están separados por tabuladores (sí, el tabulador es . Muchos ficheros tienen campos separados por, además del tabulador, caracteres tales como ,, ;, | u otros. Es necesario indicárselo a R y la manera de averiguar qué separador usa un fichero, si es que no se sabe, es abriéndolo previamente con un editor de texto decente11.
header = TRUE indica que la primera fila del fichero contiene los nombres de las columnas. Si olvidas especificarlo y la primera fila del fichero contiene efectivamente el nombre de las columnas, R interpretará estas, erróneamente, como datos.
Con una expresión similar a esa, tal vez cambiando el separador, se leen la mayoría de los ficheros de texto habituales. Otras opciones de las muchas que tiene read.table que pueden ser útiles en determinadas ocasiones son:
Lee el fichero paro.csv (ARCHIVO ADJUNTO) usando la función read.table. Comprueba que está correctamente importado usando head, tail, nrow, summary, etc. Para leer la tabla necesitarás leer con cierto detenimiento ?read.table.
Ejecución del ejercicio:
Elegimos el directorio en el que vamos a guardar nuestro programa y el fichero que vamos a utilizar, y revisamos si se guardo en el directorio que elegimos.
setwd("E:/Programacion1")
getwd()
## [1] "E:/Programacion1"
Con la función read.table vamos a leer el fichero, y guardaremos los datos del fichero en la varible paro
paro<- read.table(file="paro.csv",header = T, sep = "")
Procedemos a comprobar si se importó correctamente el fichero con las siguientes funciones:
head(paro)
## Gender Provinces Periodo Situation value
## 1 Males 02 Albacete 2014Q4 active 103.9
## 2 Females 02 Albacete 2014Q4 active 83.5
## 3 Males 03 Alicante/Alacant 2014Q4 active 490.5
## 4 Females 03 Alicante/Alacant 2014Q4 active 398.7
## 5 Males 04 Almería 2014Q4 active 198.5
## 6 Females 04 Almería 2014Q4 active 155.8
tail(paro)
## Gender Provinces Periodo Situation value
## 8315 Males 50 Zaragoza 2011Q1 inactive 134.3
## 8316 Females 50 Zaragoza 2011Q1 inactive 199.4
## 8317 Males 51 Ceuta 2011Q1 inactive 10.7
## 8318 Females 51 Ceuta 2011Q1 inactive 16.5
## 8319 Males 52 Melilla 2011Q1 inactive 9.1
## 8320 Females 52 Melilla 2011Q1 inactive 15.3
nrow(paro)
## [1] 8320
summary(paro)
## Gender Provinces Periodo Situation
## Length:8320 Length:8320 Length:8320 Length:8320
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## value
## Min. : 0.0
## 1st Qu.: 14.4
## Median : 61.9
## Mean : 120.1
## 3rd Qu.: 144.7
## Max. :1828.9
## NA's :1
Repite el ejercicio anterior eliminando la opción header = TRUE. Examina el resultado y comprueba que, efectivamente, los datos no se han cargado correctamente
Ejecución del ejercicio:
Al igual que el ejercicio anterior, se debe leer y cargar el fichero, en este caso, sin ubicar la función header.
setwd("E:/Programacion1")
paro2<- read.table(file="paro.csv")
Una vez cargado el fichero, se procederá a utilizar las funciones anteriores, tales como: head, tail, nrow y summary.
head(paro2)
## V1 V2 V3 V4 V5
## 1 Gender Provinces Periodo Situation value
## 2 Males 02 Albacete 2014Q4 active 103.9
## 3 Females 02 Albacete 2014Q4 active 83.5
## 4 Males 03 Alicante/Alacant 2014Q4 active 490.5
## 5 Females 03 Alicante/Alacant 2014Q4 active 398.7
## 6 Males 04 Almería 2014Q4 active 198.5
tail(paro2)
## V1 V2 V3 V4 V5
## 8316 Males 50 Zaragoza 2011Q1 inactive 134.3
## 8317 Females 50 Zaragoza 2011Q1 inactive 199.4
## 8318 Males 51 Ceuta 2011Q1 inactive 10.7
## 8319 Females 51 Ceuta 2011Q1 inactive 16.5
## 8320 Males 52 Melilla 2011Q1 inactive 9.1
## 8321 Females 52 Melilla 2011Q1 inactive 15.3
nrow(paro2)
## [1] 8321
summary(paro2)
## V1 V2 V3 V4
## Length:8321 Length:8321 Length:8321 Length:8321
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## V5
## Length:8321
## Class :character
## Mode :character
Lee algún fichero de datos de tu interés y repite el ejercicio anterior (CADA GRUPO USARÁ SU ARCHIVO DE PREFERENCIA Y LO EXPLICARÁ EN LA EXPOSICIÓN).
Ejecución del ejercicio:
Se importará un fichero en csv y lo haremos de la misma forma que lo hicimos anteriormente con el fichero de paro.
camas_disponibles1 <- read.csv("E:/Programacion1/camas disponibles2022.csv",header = T, sep=";")
Una vez importado el fichero, se ejecutarán las funciones aplicadas en los anteriores ejercicios.
head(camas_disponibles1)
## prov_ubi cant_ubi parr_ubi area_ubi
## 1 Guayas Guayaquil Ayacucho Urbana
## 2 Santo Domingo de los Tsáchilas Santo Domingo Chiguilpe Urbana
## 3 Pichincha Quito La Concepción Urbana
## 4 Pichincha Quito Rumipamba Urbana
## 5 Guayas Pedro Carbo Sabanilla Rural
## 6 Guayas Daule Banife Urbana
## clase
## 1 Gineco-Obstétrico
## 2 Hospital básico
## 3 Hospital básico
## 4 Hospital general
## 5 Establecimientos del día que prestan internacion hospitalaria
## 6 Clínica general (sin especialidad)
## tipo entidad
## 1 Agudo Privados sin fines de lucro
## 2 Sin tipo hospitales básicos Privados con fines de lucro
## 3 Sin tipo hospitales básicos Privados con fines de lucro
## 4 Agudo Privados con fines de lucro
## 5 Agudo Privados sin fines de lucro
## 6 Clínicas generales sin especialidad Privados sin fines de lucro
## sector camas_disp totegres
## 1 Privado sin fines de lucro 34 1686
## 2 Privado con fines de lucro 8 402
## 3 Privado con fines de lucro 12 518
## 4 Privado con fines de lucro 40 2254
## 5 Privado sin fines de lucro 7 73
## 6 Privado sin fines de lucro 6 278
tail(camas_disponibles1)
## prov_ubi cant_ubi parr_ubi area_ubi
## 45 Cañar Azoques Azogues Urbana
## 46 Esmeraldas Esmeraldas 5 De Agosto Urbana
## 47 Pichincha Quito Centro Histórico Urbana
## 48 Guayas Guayaquil Febres Cordero Urbana
## 49 Pichincha Quito Ponceano Urbana
## 50 Santa Elena Santa Elena Santa Elena Urbana
## clase
## 45 Hospital básico
## 46 Clínica general (sin especialidad)
## 47 Clínica general (sin especialidad)
## 48 Establecimientos del día que prestan internacion hospitalaria
## 49 Clínica general (sin especialidad)
## 50 Hospital básico
## tipo entidad
## 45 Sin tipo hospitales básicos Privados con fines de lucro
## 46 Clínicas generales sin especialidad Privados con fines de lucro
## 47 Clínicas generales sin especialidad Privados con fines de lucro
## 48 Agudo Privados con fines de lucro
## 49 Clínicas generales sin especialidad Privados con fines de lucro
## 50 Sin tipo hospitales básicos Privados sin fines de lucro
## sector camas_disp totegres
## 45 Privado con fines de lucro 11 1125
## 46 Privado con fines de lucro 11 147
## 47 Privado con fines de lucro 205 2098
## 48 Privado con fines de lucro 13 43
## 49 Privado con fines de lucro 34 2354
## 50 Privado sin fines de lucro 26 353
nrow(camas_disponibles1)
## [1] 50
summary(camas_disponibles1)
## prov_ubi cant_ubi parr_ubi area_ubi
## Length:50 Length:50 Length:50 Length:50
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## clase tipo entidad sector
## Length:50 Length:50 Length:50 Length:50
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## camas_disp totegres
## Min. : 3.00 Min. : 1.0
## 1st Qu.: 8.00 1st Qu.: 150.8
## Median : 12.50 Median : 462.0
## Mean : 23.96 Mean : 681.0
## 3rd Qu.: 25.25 3rd Qu.: 928.0
## Max. :205.00 Max. :2354.0
En read.table y sus derivados puedes indicar, además de ficheros disponibles en el disco duro, la URL de uno disponible en internet. Prueba a leer directamente el fichero disponible en https://datanalytics.com/uploads/datos_treemap.txt. Nota: es un fichero de texto separado por tabuladores y con nombres de columna.
Ejecución del ejercicio:
Cargamos la ruta
ur1="https://datanalytics.com/uploads/datos_treemap.txt"
Leemos el fichero
url1=read.table(ur1,header=TRUE)
url1
## valor cap div
## 1 ABE 7793 12.04
## 2 ABG 1473 1.23
## 3 ACS 7930 8.13
## 4 ACX 2217 5.06
## 5 AMS 5910 2.27
## 6 ANA 3760 5.24
## 7 BBVA 24819 8.34
## 8 BKT 1646 5.85
## 9 BME 1589 10.38
## 10 CABK 11644 6.48
## 11 ELE 17215 3.08
## 12 ENG 3092 6.47
## 13 EVA 1971 6.70
## 14 FCC 2026 8.99
## 15 FER 5780 5.33
## 16 GAM 838 0.20
## 17 GAS 11022 7.24
## 18 GRF 2978 NA
## 19 IBE 25989 7.51
## 20 ICAG 3193 NA
## 21 IDR 1904 5.86
## 22 ITX 36571 2.39
## 23 MAP 6446 7.17
## 24 MTS 20577 1.82
## 25 OHL 1721 2.84
## 26 POP 4392 5.58
## 27 REE 4239 5.98
## 28 REP 22885 5.60
## 29 SAB 3433 5.67
## 30 SAN 44430 11.38
## 31 SYV 1823 2.32
## 32 TEF 57917 11.03
## 33 TL5 1652 8.62
## 34 TRE 1336 5.61
Alternativamente, si quieres leer un fichero remoto, puedes descargarlo directamente desde R. Consulta la ayuda de download.file para bajarte al disco duro el fichero del ejercicio anterior (EJERCICIO 5) y leerlo después.
Ejecución del ejercicio:
Downoad.file nos ayuda a descargar el fichero del enlache a la carpeta de nuestro directorio
download.file(ur1,"fichero.txt")
Para leer el fichero ya descargado se hará uso de la función read.table
read.table("fichero.txt")
## V1 V2 V3
## 1 valor cap div
## 2 ABE 7793 12.04
## 3 ABG 1473 1.23
## 4 ACS 7930 8.13
## 5 ACX 2217 5.06
## 6 AMS 5910 2.27
## 7 ANA 3760 5.24
## 8 BBVA 24819 8.34
## 9 BKT 1646 5.85
## 10 BME 1589 10.38
## 11 CABK 11644 6.48
## 12 ELE 17215 3.08
## 13 ENG 3092 6.47
## 14 EVA 1971 6.7
## 15 FCC 2026 8.99
## 16 FER 5780 5.33
## 17 GAM 838 0.2
## 18 GAS 11022 7.24
## 19 GRF 2978 <NA>
## 20 IBE 25989 7.51
## 21 ICAG 3193 <NA>
## 22 IDR 1904 5.86
## 23 ITX 36571 2.39
## 24 MAP 6446 7.17
## 25 MTS 20577 1.82
## 26 OHL 1721 2.84
## 27 POP 4392 5.58
## 28 REE 4239 5.98
## 29 REP 22885 5.6
## 30 SAB 3433 5.67
## 31 SAN 44430 11.38
## 32 SYV 1823 2.32
## 33 TEF 57917 11.03
## 34 TL5 1652 8.62
## 35 TRE 1336 5.61