En esta nueva entrega aprenderemos a importar datos a R desde otras fuentes. Habitualmente no introduciremos manualmente los datos, emplearemos las posibilidades de lectura que nos ofrece R. En este capítulo leeremos ficheros de texto y ficheros Access, para ello necesitaremos el paquete de R RODBC.
Para leer fichero de texto emplearemos un fichero de ejemplo GRADES.TXT que es un fichero de texto delimitado por espacios y sin cabeceras, tiene los siguientes campos:
Variable
ID del estudiante
genero
clase
puntuación de test
puntuación del examen 1
puntuación del examen 2
puntuación de laboratorio
puntuación del examen final
Descargateló aquí y guardaló en C:\WINDOWS\temp para seguir el ejemplo. La función que se emplea en R para leer tablas desde ficheros de texto es read.table:
> archivo <- read.table (file= "c:\\WINDOWS\\temp\\GRADES.TXT", header=FALSE) #leemos el archivo
> archivo
V1 V2 V3 V4 V5 V6 V7 V8
1 air f 4 50 93 93 98 162
2 aln m 4 49 95 98 97 175
3 bam m 4 39 63 84 95 95 ...
Vemos que la sintaxis de la función read.table es bastante sencilla. Recomiendo estudiar la documentación que tiene R al respecto de esta función. El argumento principal de esta función será file=<ubicación y nombre del fichero>, además con header indicamos si es necesario leer cabeceras, por defecto read.table tiene lo tiene a FALSE. Para introducir las cabeceras al fichero empleamos vectores:
> archivo <- read.table (file="c:\\WINDOWS\\temp\\GRADES.TXT") #leemos el archivo
> nombres<-c("ID","sexo","clase","test","exam1","exam2","labo","final") #creamos un vector de nombres
> names(archivo)<-nombres #nombramos las variables
> archivo
ID sexo clase test exam1 exam2 labo final
1 air f 4 50 93 93 98 162
2 aln m 4 49 95 98 97 175
3 bam m 4 39 63 84 95 95
4 bag f 3 46 92 96 88 150...
Empleamos la función names para dar nombres a las variables del data.frame archivo a partir de un vector que contiene dichos nombres.
Otra fuente de datos muy habitual puede ser Access. Para leer bases de datos necesitaremos tener instalado el paquete RODBC. En el capítulo anterior se indicó como descargar e intalar este módulo de R. Para este ejemplo partimos de una BBDD Access bd1 almacenada en C:/WINDOWS/temp que contiene la siguiente tabla:
POBLACION |
RECLAM |
TAM_COCHE |
GRUPO_EDAD |
500 |
42 |
small |
1 |
1200 |
37 |
medium |
1 |
100 |
1 |
large |
1 |
400 |
101 |
small |
2 |
500 |
73 |
medium |
2 |
300 |
14 |
large |
2 |
Podéis crear la BBDD en la ubicación C:/WINDOWS/temp copiar y pegar el ejemplo para estudiar como funciona el código. Comencemos a analizar las sentencias en R:
> setwd("c:/windows/temp") #Especificamos el directorio de trabajo.
> library(RODBC) #Cargamos los paquetes.
> bd<-odbcConnectAccess("bd1.mdb")
> bd #Analizamos la conexión ODBC
RODB Connection 1
Details:
case=nochange
DBQ=c:\windows\temp\bd1.mdb
Driver={Microsoft Access Driver (*.mdb)}
DriverId=25
FIL=MS Access
MaxBufferSize=2048
PageTimeout=5
UID=admin
Primero necesitamos especificar el directorio de trabajo con la función setwd. Después cargamos el módulo RODBC con la función library, recordemos que podemos cargarlo vía menú. Por último creamos la conexión con la función específica de RODBC odbcConnectAccess y comprobamos que la conexión funciona correctamente. Ahora estamos en disposición de realizar consultas sobre las tablas de la BBDD conectada:
> datos<-sqlQuery(bd,"SELECT * FROM tabla2") #Realizamos una consulta sobre la tabla2
> datos
POBLACION RECLAM TAM_COCHE GRUPO_EDAD
1 500 42 small 1
2 1200 37 medium 1
3 100 1 large 1
4 400 101 small 2
5 500 73 medium 2
6 300 14 large 2
Las consultas se realizan con la función específica sqlQuery donde introduciremos la BBDD conectada y la consulta en SQL estándar entre comillas. Con esta sentencia hemos creado un objeto de R que contiene una tabla de Access. Ya tenemos conectado R con dos de los orígenes de datos más habituales. En sucesivas entregas leeremos datos con R de SAS y SPSS.
muchas gracias! me ha servido mucho… voy a leer todos los manuales ahora.
Gracias nuevamente por tu trabajo.
Hola,
me gustaría saber si existe alguna forma para meter en una única variable el nombre de todos los ficheros de una extensión «txt» en una carpeta
Gracias.
Un saludo
Mira a ver si te sirve la función list.files:
f_txt <- list.files("C:\\temp",pattern="txt")
Buenos días
Cómopuedo leer desde R un fichero plano de ancho fijo y sin nombre de variables en la primera fila
Muchas gracias
Buenos días
Me gustaría saber cómo puedo leer desde R un fichero plano(txt) de ancho fijo que además no contiene nombre de variables.
Muchas gracias
Hola, prueba:
datos <- read.table("c:/datos.txt", header=FALSE, sep=" SEPARADOR QUE USES ")
Saludos.
Hola otra vez
No tengo separador de campo, tengo el diseño de registro con la longitud de cada campo
Sólo tengo 1 variable, ¿cómo lo introduzco en el documento para poder trabajar en R?