jueves, 26 de marzo de 2009

R: Listas y Data Frames.

El principio básico del estudio estadísticos se basa, principalmente, en la manipulación de un conjunto de datos.

R, nos proporciona dos maneras de obtener un conjunto de datos, ya sea mediante listas o con hojas de datos. Éste, es el propósito de este capítulo, el estudio de listas y datos en R.

Listas.

Una lista es un concepto más general de almacenamiento de datos, en definitiva, una lista es un conjunto de objetos, conocimos como componentes, cada uno de los cuales puede ser cualquier otro objeto.

En pocas palabras, una lista es una colección ordenada de componentes. No es necesario que los componentes sean del mismo modo, así una lista puede estar compuesta de, por ejemplo, un vector numérico, un valor lógico, una matriz o una función.

En R, la creación de listas de objetos es posible mediante la función list(), dicha función ya está definida. Un ejemplo simple de declarar una lista, se muestra a continuación:

> Lista <- list(blog="Aqueronte", blogger="Manuel Caballero", no.entradas=410,
+ tematica.blog=c("Electrónica", "Matemáticas", "Físicas", "Literatura"))
> Lista
$blog
[1] "Aqueronte"

$blogger
[1] "Manuel Caballero"

$no.entradas
[1] 410

$tematica.blog
[1] "Electrónica"."Matemáticas"."Físicas"."Literatura"

Como se puede observar, en el ejemplo anterior se han creado cuatro objetos: blog, blogger, no.entradas y tematica.blog, y dentro de cada componente se le ha asignado valores.

Para acceder a una lista, se utiliza ya sea un signo de dólar, $, o dobles corchetes y un número o un nombre, por ejemplo, si queremos acceder al componente no.entradas:

> Lista$no.entradas
[1] 410

Es equivalente si lo escribimos mediante doble corchetes:

> Lista[[3]]
[1] 410

Ahora bien, en el objeto: tematica.blog, es un vector de tipo carácter, para acceder al cualquier elemento de dicho vector, sería como se indica a continuación:

> Lista[[4]][2]
[1] "Matemáticas"

Donde hemos accedido al objeto: tematica.blog y concretamente al elemento segundo. También es posible utilizar los nombres de los componentes entre dobles corchetes, por ejemplo, Lista[["blog"]]:

> Lista[["blog"]]
[1] "Aqueronte"

Es equivalente al escribir: Lista$blog:

> Lista$blog
[1] "Aqueronte"

Esta opción es muy útil en el caso en que el nombre de los componentes se almacena en otra variable ya que puede utilizarse como índice en las listas:

> X1 <- "blog"
> X1
[1] "blog"

> Lista[[X1]]
[1] "Aqueronte"

Vemos que ya se pude acceder al objeto de la lista con el índice X1, esto es equivalente a:

> Lista[[1]]
[1] "Aqueronte"

Un aspecto en las listas a tener muy en cuenta, es la diferencia entre Listas[[1]] y Listas[1]. [[. . .]], es el operador utilizado para seleccionar un sólo elemento, mientras que `[. . .]' es un operador general de indexado.

Es decir, Lista[[1]] es el primer objeto de la lista Lista, y si es una lista con nombres, el nombre no está incluido. Por su parte, Lista[1], es una sublista de la lista Lista consistente en la primera componente. Si la lista tiene nombre, éste se tranfiere a la sublista.

Data Frames.

En español, Hojas de Datos y no es más que una lista que pertenece a la clase data.frame. Hay que tener en cuenta ciertas restricciones:

  • Los componentes deben ser vectores (numéricos, cadenas de caracteres, o lógicos), factores, matrices numéricas, listas u otras hojas de datos.
  • Las matrices, listas, y hojas de datos contribuyen a la nueva hoja de datos con tantas variables como columnas, elementos o variables posean, respectivamente.
  • Los vectores numéricos y los factores se incluyen sin modificar, los vectores no numéricos se fuerzan a factores cuyos niveles son los únicos valores que aparecen en el vector.
  • Los vectores que constituyen la hoja de datos deben tener todos la misma longitud, y las matrices deben tener el mismo tamaño de las filas.

Las hojas de datos pueden interpretarse, en muchos sentidos, como matrices cuyas columnas pueden tener diferentes modos y atributos. Pueden imprimirse en forma matricial y se pueden extraer sus filas o columnas mediante la indexación de matrices.

Para crear una hoja de datos, R nos proporciona la función ya definida: data.frame(). Por ejemplo:

> HojaDatos <- data.frame(Entradas=410, Blog="Aqueronte", Blogger="Manuel Caballero")
> HojaDatos
...Entradas.......Blog..........Blogger
1.....410........Aqueronte......Manuel Caballero

Para forzar que una lista, cuyos componentes cumplan las restricciones ya mencionadas, sea una hoja de datos, se puede mediante la función: as.data.frame(), Por ejemplo, en la lista definida anteriormente:

> as.data.frame(Lista)
.........blog..............blogger..........no.entradas....tematica.blog
1 Aqueronte..Manuel Caballero.......410.............Electrónica
2 Aqueronte..Manuel Caballero.......410.............Matemáticas
3 Aqueronte..Manuel Caballero.......410.............Físicas
4 Aqueronte..Manuel Caballero.......410.............Literatura

Se pude observar, que se han repetido ciertos elementos, esto es así por imposición de las reglas mencionadas anteriormente, todos los vectores deben tener la misma longitud.

Aunque quizás el ejemplo anterior no sea lo suficientemente claro, la idea principal de la función data.frame() es muy valiosa cuando se importan datos, ya que éstos, podemos convertirlos en hojas de datos para su posterior manipulación de forma más asequible para nosotros.

Se recomienda que se amplíe la información sobre las funciones en éste capítulo expuestas en la ayuda que trae incorporada el programa R.

0 comentarios: