La siguiente publicación introductoria está destinada a los nuevos usuarios de R. Trata de la reestructuración de los datos: qué son y cómo realizarlos utilizando las funciones base R y el paquete {reshape}.
Este es un artículo invitado del Dr. Robert I. Kabacoff, fundador de (uno de) los primeros sitios web de tutoriales de R en línea: Quick-R. Kabacoff ha publicado recientemente el libro «R en acción», que proporciona un recorrido detallado para el lenguaje R basado en varios ejemplos para ilustrar las características de R (manipulación de datos, métodos estadísticos, gráficos, etc.). El post anterior de Kabacoff introdujo data.objetos de marco en R.
Para los lectores de este blog, hay un descuento del 38% en el libro «R en acción» (así como en todos los demás libros electrónicos, libros y MEAPs de Manning publishing house), simplemente utilizando el código rblogg38 al llegar a la caja.
Hablemos ahora de la Agregación y reestructuración de datos en R:
Agregación y reestructuración
R proporciona una serie de métodos potentes para agregar y remodelar datos. Cuando agrega datos, reemplaza grupos de observaciones con estadísticas de resumen basadas en esas observaciones. Al cambiar la forma de los datos, se altera la estructura (filas y columnas) para determinar cómo se organizan los datos. Este artículo describe una variedad de métodos para llevar a cabo estas tareas.
Usaremos el marco de datos mtcars que se incluye con la instalación base de R. Este conjunto de datos, extraído de Motor Trend magazine (1974), describe las características de diseño y rendimiento (número de cilindros, desplazamiento, potencia, mpg, etc.) para 34 automóviles. Para obtener más información sobre el conjunto de datos, consulte ayuda(mtcars).
Transponer
La transposición (invertir filas y columnas) es quizás el método más simple de remodelar un conjunto de datos. Utilice la función t () para transponer una matriz o un marco de datos. En este último caso, los nombres de fila se convierten en nombres de variables (columnas). Un ejemplo se presenta en la siguiente lista.
Listing 1 Transponer un conjunto de datos
Listing 1 utiliza un subconjunto del conjunto de datos mtcars para ahorrar espacio en la página. Verá una forma más flexible de transponer datos cuando veamos el paquete de remodelación más adelante en este artículo.
Agregar datos
Es relativamente fácil contraer datos en R usando una o más variables by y una función definida. El formato es
1 |
aggregate(x, by, FUN) |
donde x es el objeto de datos que se contraerá, by es una lista de variables que se cruzarán para formar las nuevas observaciones, y FUN es la función escalar utilizada para calcular las estadísticas de resumen que conformarán los nuevos valores de observación.
Como ejemplo, agregaremos los datos de mtcars por número de cilindros y engranajes, devolviendo medias en cada una de las variables numéricas (consulte la siguiente lista).
Enumerar 2 datos agregados
En estos resultados, Grupo.1 representa el número de cilindros (4, 6 o y Grupo.2 representa el número de marchas (3, 4 o 5). Por ejemplo, los automóviles con 4 cilindros y 3 marchas tienen una media de 21,5 millas por galón (mpg).
Cuando usas la función aggregate (), las variables by deben estar en una lista (incluso si solo hay una). Puede declarar un nombre personalizado para los grupos dentro de la lista, por ejemplo, usando by=list(Group.cyl = cyl, Grupo.engranajes=engranajes).
La función especificada puede ser cualquier función incorporada o proporcionada por el usuario. Esto le da al comando agregado una gran cantidad de poder. Pero cuando se trata de energía, nada supera al paquete de remodelación.
El paquete de remodelación
El paquete de remodelación es un enfoque tremendamente versátil para reestructurar y agregar conjuntos de datos. Debido a esta versatilidad, puede ser un poco difícil de aprender.
Pasaremos por el proceso lentamente y usaremos un pequeño conjunto de datos para que quede claro lo que está sucediendo. Debido a que reshape no está incluido en la instalación estándar de R, deberá instalarlo una sola vez, utilizando install.paquetes(«remodelar»).
Básicamente, «fundirá» los datos para que cada fila sea una combinación única de variables de identificación. Luego «moldearás» los datos fundidos en cualquier forma que desees. Durante el lanzamiento, puede agregar los datos con cualquier función que desee. El conjunto de datos con el que trabajará se muestra en la tabla 1.
Tabla 1 El conjunto de datos original (mydata)
ID |
Tiempo |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
En este conjunto de datos, las mediciones son los valores en los dos últimos columnas (5, 6, 3, 5, 6, 1, 2, y 4). Cada medición se identifica de forma única mediante una combinación de variables ID (en este caso, ID, Tiempo y si la medición se realiza en X1 o X2). Por ejemplo, el valor medido 5 en la primera fila se identifica de forma única al saber que proviene de la observación (ID) 1, en el Momento 1 y en la variable X1.
Fusión
Al fundir un conjunto de datos, lo reestructura en un formato en el que cada variable medida está en su propia fila, junto con las variables de IDENTIFICACIÓN necesarias para identificarlo de forma única. Si se derriten los datos de la tabla 1, utilizando el código siguiente
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
Se termina con la estructura que se muestra en la tabla 2.
Tabla 2 derretido conjunto de datos
ID |
Tiempo |
Variable |
Valor |
1 | 1 | X1 | 5 |
1 | 2 | X1 | 3 |
2 | 1 | X1 | 6 |
2 | 2 | X1 | 2 |
1 | 1 | X2 | 6 |
1 | 2 | X2 | 5 |
2 | 1 | X2 | 1 |
2 | 2 | X2 | 4 |
tenga en cuenta que debe especificar las variables necesarias para identificar de forma única cada medición (ID y el Tiempo) y que la variable que indica la medición de los nombres de las variables (X1 o X2), se crea automáticamente.
Ahora que tiene sus datos en una forma fundida, puede volver a fundirlos en cualquier forma, utilizando la función cast ().
Casting
La función cast() comienza con datos fundidos y los cambia de forma utilizando una fórmula que usted proporciona y una función (opcional) utilizada para agregar los datos. El formato es
1 |
newdata <- cast(md, formula, FUN) |
Donde md son los datos fundidos, formula describe el resultado final deseado, y FUN es la función de agregación (opcional). La fórmula toma la forma
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
En esta fórmula, rowvar1 + rowvar2 + define define el conjunto de variables cruzadas que definen las filas, y colvar1 + colvar2 + define define el conjunto de variables cruzadas que definen las columnas. Vea los ejemplos en la figura 1. (haga clic para ampliar la imagen)
Figura 1 Remodelación de datos con las funciones melt() y cast ()
Debido a que las fórmulas del lado derecho (d, e y f) no incluyen una función, los datos se remodelan. Por el contrario, los ejemplos del lado izquierdo (a, b y c) especifican la media como una función de agregación. Por lo tanto, los datos no solo se reformulan, sino que también se agregan. Por ejemplo, (a) da las medias en X1 y X2 promediadas a lo largo del tiempo para cada observación. El ejemplo (b) da las puntuaciones medias de X1 y X2 en el Tiempo 1 y el Tiempo 2, promediadas sobre las observaciones. En (c) tiene la puntuación media para cada observación en el Tiempo 1 y el Tiempo 2, promediada sobre X1 y X2.
Como puede ver, la flexibilidad proporcionada por las funciones melt() y cast() es increíble. Hay muchas veces en las que tendrá que remodelar o agregar sus datos antes del análisis. Por ejemplo, normalmente tendrá que colocar sus datos en lo que se denomina formato largo similar a la tabla 2 al analizar datos de medidas repetidas (datos en los que se registran varias medidas para cada observación).
Resumen
El capítulo 5 de R en Acción revisa muchas de las docenas de funciones matemáticas, estadísticas y de probabilidad que son útiles para manipular datos. En este artículo, hemos explorado brevemente varias formas de agregar y reestructurar datos.
Este artículo apareció por primera vez como capítulo 5.6 del libro «R en acción», y se publica con permiso de Manning publishing house. Otros libros en este libro serio que te pueden interesar son (ver el comienzo de esta publicación para obtener un código de descuento):
- Aprendizaje automático en Acción por Peter Harrington
- Gnuplot en Acción (Comprender los datos con gráficos) por Philipp K. Janert