Lectura de datos desde un archivo (*.txt, *.csv, *.xlsx, *.spss)
 

En esta parte vamos a trabajar con datos de tipo trexto o también llamado datos contenidos en archivos planos.

Los datos no siempre van a ser ingresados desde la consola del R. Es más cómodo ingresar los datos usando otros programas como los editores, el Word, Excel, etc.

Por otro lado, es probable que los datos a ser procesados ya estén guardados como archivos de texto.

<

Por estas razones vamos a ver cómo se leen los datos desde archivos de texto.

Sintaxis:

>datos = read.table("ruta\\nombrearchivo.txt || nombrearchivo.csv", header = True, sep = "...")

La palabra "ruta" debe ser reemplazada por el formato :"unidad\\carpeta..."

Ejemplo:

Supongamos que en la carpeta rpage, de la unidad D, tenemos guardado el archivo ahorro.txt, separado con comas y la primera columna contiene nombre de variable. Queremos leerlo y dejarlo en la variable Datos.

>datos = read.table("d:\\rpage\\ahorro.txt",header = T, sep = ",")

El primer argumento contiene el nombre del archivo acompañado de la ruta, todo encerrado entre doble comilla.
En el segundo argumento, header, se tiene el atributo de indicar si la primera línea de los dato contiene cabecera (True) o no (False).
En el tercer argumento, sep, contiene el caracter usado como separador de los datos en la fila. El separador puede ser ",", ";", "/", etc.

Una vez ejecutado el comando, visualizamos los datos:
 >datos

La función
>head(datos)
nos proporciona  las primeras líneas de los datos, mostrando el nombre de las variables o cabecera de columna

La función
>str(datos)
nos proporciona la estructura del objeto (variable) datos.
Podemos apreciar el número de observaciones y el número de variables que la conforman.
Del mismo modo, podemos apreciar el nombre y tipo de cada una de las variables y algunos de sus valores.

También encontramos que este objeto "datos" a la cual nos estamos refiriendo, es un "DATAFRAME" o en la forma de manipularla: "data.frame". Más adelante usaremos esto en más detalle. Por ahora, sólo diremos que un dataframe es, en términos del Excel, una hoja de cálculo representada por filas y columnas. Las columnas contienen series de datos(cuyo nombre puede estar en la primera fila), a la cual se les manipula como variables y las filas representan un miembro, elemento o registro de estos datos, la cual está descrito por las columnas.

He aquí su representación tabular:

. . . . . . . . . . . . . . .
Nro de miembro Var 1 Var 2 Var 3 Var k
1 X11 X12 X13 X1k
2 X21 X22 X23 X2k
. . . . . . . . . . . . . . .
m Xm1 m12 Xm3 Xmk
 

De manera que, luego de leer el archivo hacia un data frame, podemos manipular sus variables en conjunto, una parte ellos o de manera individual como antes lo hemos hecho.

Nota: ¿Qué significa la presencia del símbolo "$" en la lista de esta estructura?
Antes de responder a la pregunta:
Si quisiéramos guardar la variable Ahorro en una instancia de ella (otra variable) como en a, haríamos uso del comando:
>a = Ahorro
Sin embargo nos da un error. Nos dice que la variable Ahorro no existe.
Lo mismo sucederá con cada una de las variables contenidas en "datos"; porque éste es un "dataframe".
En consecuencia, para referirnos a un elemento de un dataframe, debemos anteponerle el nombre del dataframe y unido con el signo del "$".

Según esto, >datos$Ahorro
Nos mostrará los valores de la variable Ahorro.

De manera que si deseamos algunas estadísticas de Ahorro, podríamos usar:
>mean(datos$Ahorro) >var(datos$Ahorro)

Del mismo modo, si quisiéramos algunas estadísticas de resumen, podríamos usar:
>summary(datos)

O sólo de una variable:
>summary(datos$Ingreso)

Como vemos, no es práctico el uso de una variable de un dataframe.

Una solución a ello podría ser:
>xh = datos$Ahorro
>xi = datos$Ingreso
De esta forma tenemos dos variables vectoriales cualquiera.

Otra forma de disponer de cada una de las variables que conforman un dataframe, es usar el comando o función attach(...)

Sólo para efectos de mantener a "datos" como dataframe, lo vamos a duplicar (en érminos del lenguaje de objetos, generar una instancia de él):
xdatos = datos
Ahora xdatos también es un dataframe.
Apliquemos attach(...) este dataframe:
>attach(xdatos)
Ahora
>Ahorro
>Ingreso
pueden ser usadas como variables vectoriales cualquiera.
El objeto "xdatos" sigue siendo un dataframe cuyas variables pueden ser usadas libremente.
>str(datos)
>str(xdatos)
Ambas siguen siendo dataframe.
De esta forma, un resumen estadístico aplicado a un dataframe genera los mismo resultados.
>summary(datos>
>summary(xdatos)

Si se desea restablecer a "xdatos" como dataframe típico, se deberá usar el comando o función:
>detach("xdatos")
Ahora ya no se puede usar Ahorro o Ingreso, de manera independiente.
 

Pero volvamos a nuestro tema: Lectura de datos

Vamos a leer otro archivo de texto: "agri.txt", de la carpeta "rpage", de la unidad "d", cuyo separador desconocemos y del mismo modo, no sabemos si tiene cabecera (header).

Ensayemos: Supongamos que el separador es ",".

> agr = read.table("d:\\rpage\\agri.txt",sep=",")

Al pretender visualizar el archivo que ha sido cargado a una variable, obtendremos lo que se muestra en la siguiente imagen:

Aquí podemos observar que el separador es el tabulador cuyo caracter es "\t". Del mismo modo, no tiene cabecera.

En consecuencia, el comando a ser ingresado en la consola será:

> agr = read.table("d:\\rpage\\agri.txt",sep="\t")

Si usamos
>agr
tendremos los datos en la forma correcta.
 

Lectura de un archivo csv.

Vamos a leer el archivo llamado "aurea.csv", de la misma carpeta anterior, que tiene cabecera y, siendo "csv", el delimitador es ",".

Este archivo contiene una muestra de tamaño 30 de 26 especies de esponja marina; cada especie está en una columna.

Leamos el archivo:

> datos = read.table("d:\\rpage\\aurea.csv",sep=",", header=T)

Visualicemos ese dataframe:>datos

Su estructura: >str(datos)

Los primeros datos: >head(datos)

La longitud de los datos; es decir, el número de columnas o número de variables: >length(datos)

Su dimensión: >dim(datos)

Este data frame es una tabla de tipo matriz 30x26; es decir, tenemos 26 variables cada una de las cuales posee 30 valores.

Podemos visualizar los datos de algunas variables como por ejemplo:
> datos$CaboFrio..6108
> datos$CaboFrio..6410

Un archivo plano de estensión "csv" también puede ser leído usando el siguiente comando:

>zdatos = read.csv("d:\\rpage\\aurea.csv",sep=",", header=T)

El resultado es el mismo.

 

Insertando cabecera a datos que no lo tienen

Ante todo carguemos los datos contenidos en el archivo noname.csv hacia datos

>datos=read.table("d:\\rpage\\noname.csv",sep=";")

Su estructura:
>str(datos)

A las 4 series, variables o columnas le ha puesto V1, V2, V3 y V4.

Queremos que cada una de ellas tenga un nombre apropiado.

Para ello definiremos un vector que contendrá dichos nombres:
>cab = c("Pagos","Genero", "Estudio","NHijos")

Ahora volvemos a leer pero dentro del comando introducimos nuestro vector de nombres:

> datos=read.table("d:\\rpage\\noname.csv",col.names=cab,sep=";")

Ahora le pedimos su estructura:
 >str(datos)

Lectura de un archivo del Excel

Las versiones "3.5.1" y "3.5.2" del R, ya tienen disponible la librería para leer datos provenientes de un libro del Excel.

En consecuencia, para disponer del comando que nos permite leer un "xlsx", no requiere ser instalados previamente como sí ocurre en las versiones anteriores.

Sin embargo, no se carga a memoria durante la ejecución del R. Para ello debemos usar el comando library(...) de la siguiente manera:

>library(xlsx)

En otras funciones, si este comando arroja error, se debe instalar el paquete que contiene a la función. Esto lo veremos más adelante.

Ahora ya estamos listos para leer un archivo del Excel.

Vamos a leer una muestra sobre las ventas de un determinado cereal y la publicidad hecha para tal fin en tres medios diferentes. Los datos se encuentran en la primera hoja del archivo "cereales.xlsx".

Procedemos a leerlo:

>zdatos = read.xlsx("d:\\rpage\\cereales.xlsx",1)

El último argumento es una referecia al indice o número de hoja del libro.

Podemos visualizar los datos:
 >zdatos

La lectura como se puede ver siempre nos deja los datos en un dataframe.

En este dataframe:
- Ventas: Es el monto de las ventas (en miles de soles)  logradas en 20 días.
- Pubtv: El monto  invertido en publicidad en televisión.
- Pubra: El monto  invertido en publicidad en radio.
- Pubper: El monto  invertido en publicidad en periódico.

Sólo para aprovechar los datos:
>summary(zdatos)
Nos proporiona las estadísticas básicas de estas variables.

Antes hemos usado la función plot(...) que nos permite plotear una variable, veamos qué ocurre con la gráfica de este dataframe.<br>
>plot(zdatos)

Interesante:
Observamos que estas variables están bastante relacionadas; es decir, hay una fuerte dependencia una de otra.
Vemos que las ventas aumentan cuando la publicidad en los tres medios aumenta.
Este gráfico es el llamado DIAGRMA DE DISPERSIÓN, que lo trataremos más adelante.


Para usar las variables, podemos usarlas precedidas de zdatos$ o "atacharlas" para después "detacharlas" usando
Ejemplo: Queremos visualizar los valores de la serie Ventas:
En este cado debemos digitar:
>zdatos$Ventas

Si se quisiera sumar los montos invertidos en publicidad en TV, radio y periódico:
> zdatos$Pubtv+zdatos$Pubra+zdatos$Pubper

Para evitar el uso del dataframe y el conector $, se debe ejecutar la función attach:

>attach(zdatos)

Ahora ya se puede usar las series simplemente por sus nombres: >Ventas

Para desactivar la independencia de las series se debe usar:
>detach("zdatos")
 

Lectura de datos desde un archivo creado en spss


Veamos si la función que nos permite leer datos del SPSS que se encuentra en memoria:
Usemos:
> d=read.spss("d:\\rpage\\mineros.sav",use.value.labels=TRUE,max.value.labels=TRUE,to.data.frame=TRUE)

Se produce un error: La función Read.spss no se encuentra.

Como en el caso del Excel, veamos si podemos cargarlo desde la library:

>library(spss)
Obtendremos un error. Esto se produce porque el spss se encuentra en la librería foreign

Por lo tanto, antes de usarlo, debemos cargar a memoria este paquete.

Veamos si está instalado y listo para ser cargado a memoria:
>library(foreign)

No habiendo ningún mensaje en contra, debe haberlo hallado y puesto en memoria.

En cnsecuencia, volvamos a repetir el comando para cargar en d el contenido del archivo mineros.sav.

>d=read.spss("d:\\rpage\\mineros.sav")

Si ahora deseamos visualizar su contenido, digitamos

>d

El resultadoobtenido es incomprensible; esto sucede porque el comando ingresado no está completo. Se debe ingresar:

> d=read.spss("d:\\rpage\\mineros.sav",use.value.labels=TRUE,max.value.labels=TRUE,to.data.frame=TRUE)

Los argumentos que se emplean son exclusivos para el SPSS.

Visualicemos los datos:
>d
>str(d)

Como en los casos anteriores de datos provenientes de archivos grabados en otro medio, el objeto (variable, vector o matriz) en donde se almacenan los datos, es un dataframe.

Para referirnos, por ejemplo a la ALTURA o VOLUMEN, debemos usar: d$ALTURA, d$VOLUMEN.

Aprovechemos la estructura mostrada de estos datos:
La variable TABACO es una variable categórica que toma valores: 1, 2 y 3,
en donde: 1 = "Fuma actualmene"; 2 = "Exfumador"; 3 = "Nunca fumó".

Use plot(d) y comente los gráficos obtenidos.
 

Continuaremos en la siguiente sesión