Librerías necesarias

Las librerías a ejecutar son:1

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(reshape2)

La mayor aportación realizada por MS Excel al mundo BI es, para mí, las tablas dinámicas. El problema en Excel aparece cuando tienes que calcular un número significativo de tablas dinámicas. La automatización que permite el lenguaje de R acude en nuestra ayuda. La pregunta clave es: ¿Es posible reproducir una tabla dinámica también en R? Pues claro. Aunque hay varias maneras de hacer esto, aquí haremos uso de las posibilidades que nos ofrece el paquete reshape2, cuyo autor es Hadley Wickam, creador de un ecosistema de paquetes que se ha dado en llamar Hadleyverse:

Trabajando con los datos

Usemos el dataset que viene en R y que se llama mtcars (un grupo de coches con sus características en las columnas)

Tiene la siguiente pinta:

head(mtcars,3)
##                mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

Aunque las variables cyl,vs,am,gear,carb son numéricas, realmente son variables categóricas (determinan la pertenencia a grupos). Por ejemplo, la variable am, es el tipo de transmisión (0=automatica, 1=manual). Digamos que quiero hacer una tabla dinámica de cyl (número de cilindros) en las filas y gear (número de marchas) y representar el peso medio de los vehículos (wt)

Podemos usar el comando dcast() del paquete reshape2 asignando el resultado a la variable de memoria peso_coches:

peso_coches<-dcast(mtcars,cyl~gear,mean,value.var="wt")
head(peso_coches)
##   cyl        3        4      5
## 1   4 2.465000 2.378125 1.8265
## 2   6 3.337500 3.093750 2.7700
## 3   8 4.104083      NaN 3.3700

que es el formato de tabla dinámica con el que estamos familiarizados por nuestro uso habitual en Excel. Aparece un valor perdido (NaN) para los coches de 8 cilindros y 4 marchas. Esto se debe a que no hay ninguno con esas características en el dataset.

donde:

Así sería la tabla dinámica en Excel:

Tabla dinámica en Excel

Tabla dinámica en Excel

Ah, pero en R no aparecen los totales por filas y por columnas. No problemo. Podemos añadir el parámetro margins=TRUE y arreglado.

peso_coches<-dcast(mtcars,cyl~gear,mean,value.var="wt",margins=TRUE)
head(peso_coches)
##     cyl        3        4      5    (all)
## 1     4 2.465000 2.378125 1.8265 2.285727
## 2     6 3.337500 3.093750 2.7700 3.117143
## 3     8 4.104083      NaN 3.3700 3.999214
## 4 (all) 3.892600 2.616667 2.6326 3.217250

Y recuerda \(y=2x+3\)


Elaborado mediante Rmarkdown con R 3.3.1 el 03-10-2016

Citas


  1. Ver más información en Yammer