Familia de funciones apply - Parte 2

La función tapply()

En esta segunda parte de la serie de post sobre la familia de funciones apply le toca el turno la función tapply(). A diferencia de la función apply() tratada en el primer post, la función tapply() se usa frecuentemente para aplicar una función a subconjuntos de un vector. Normalmente, al trabajar con bases de datos, se cuenta con variables de distinta naturaleza, algunas pueden ser numéricas, otras categóricas, la idea de tapply() es obtener resúmenes de un vector pero siendo agrupado en relación a otros vectores (variables).

En esta ocasión utilizaremos e nuevo la base de datos de starwars vista en el post sobre el paquete inspectdf.

Si quisiéramos saber la altura promedio de los personajes, basta con ejecutar el siguiente comando.

mean(starwars$height, na.rm = TRUE)
## [1] 174.358

Sin embargo, es más valioso obtener la altura promedio de acuerdo con otra variable de interés que nos permita hacer alguna comparación, como por ejemplo el género. Para esto podemos utilizar la función tapply().

tapply(X=starwars$height,     #Variable de interés
       INDEX=starwars$gender, #Variable de agrupamiento
       FUN=mean)              #Función a aplicar
##  feminine masculine 
##        NA        NA

Los NA que aparecen se deben a que existen valores faltantes dentro de la base de datos, por lo cual la función mean() no calcula correctamente el promedio a menos que se realice una imputación de estos valores faltantes o bien se indique que la función mean() debe omitir los valores faltantes usando el argumento na.rm=TRUE. En la mayoría de las funciones de la familia apply, los argumentos que pertenecen a al función que se está aplicando (en este caso mean()) deben ir después del argumento FUN.

tapply(X=starwars$height,     #Variable de interés
       INDEX=starwars$gender, #Variable de agrupamiento
       FUN=mean,              #Función a aplicar
       na.rm=TRUE)            #Se omiten los NA
##  feminine masculine 
##  164.6875  176.5161

La función tapply() no está limitada a una única variable de agrupamiento. El mismo concepto de “dimensiones” que aplicamos en la función apply() puede ser aplicado a tapply(), pero en esta ocasión las variables de agrupamiento deben especificarse dentro de una lista. A modo de ejemplo, supongamos que nos interesa saber la altura promedio según el género y el color de ojos.

tapply(X=starwars$height,
       INDEX=list(starwars$eye_color, starwars$gender), 
       FUN=mean, 
       na.rm=TRUE)
##               feminine masculine
## black            195.5  182.0000
## blue             167.0  189.7500
## blue-gray           NA  182.0000
## brown            160.0  167.3846
## dark                NA       NaN
## gold                NA  191.0000
## green, yellow       NA  216.0000
## hazel            178.0  170.0000
## orange              NA  180.5000
## pink                NA  180.0000
## red                 NA  154.8000
## red, blue         96.0        NA
## unknown             NA  136.0000
## white               NA        NA
## yellow           168.0  178.8000

Si se desea pueden agregarse más variables de agrupamiento, pero todas deben ser dentro de la lista. Por ejemplo, podría ser de interés agrupar también por el color de piel de los personajes, aunque en este caso el resultado mostraría muchos valores faltantes pues no todas las combinaciones existen. Esto es una demostración de que cada vez que se agrupen variables, estos agrupamientos deben tener sentido, pues de lo contrario solo se añadiría ruido al análisis.

tapply(X=starwars$height,
       INDEX=list(starwars$eye_color, starwars$gender, starwars$skin_color), 
       FUN=mean, 
       na.rm=TRUE)
## , , blue
## 
##               feminine masculine
## black               NA        NA
## blue                NA       196
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel              178        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , blue, grey
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA     115.5
## 
## , , brown
## 
##               feminine masculine
## black               NA        NA
## blue                NA     234.0
## blue-gray           NA        NA
## brown               NA     129.5
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA     198.0
## 
## , , brown mottle
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       180
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , brown, white
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA       216
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , dark
## 
##               feminine masculine
## black               NA        NA
## blue               184        NA
## blue-gray           NA        NA
## brown               NA  183.3333
## dark                NA       NaN
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , fair
## 
##               feminine masculine
## black               NA        NA
## blue             158.5  180.8571
## blue-gray           NA  182.0000
## brown            163.0  185.3333
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA  170.0000
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , fair, green, yellow
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow             168        NA
## 
## , , gold
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA       167
## 
## , , green
## 
##               feminine masculine
## black               NA     184.5
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA      66.0
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA     206.0
## pink                NA        NA
## red                 NA     190.0
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA     183.0
## 
## , , green-tan, brown
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       175
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , green, grey
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA       193
## white               NA        NA
## yellow              NA        NA
## 
## , , grey
## 
##               feminine masculine
## black              213  198.3333
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA  191.0000
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA  224.0000
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , grey, blue
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        79
## white               NA        NA
## yellow              NA        NA
## 
## , , grey, green, yellow
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       163
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , grey, red
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       112
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , light
## 
##               feminine masculine
## black               NA        NA
## blue            165.00     176.5
## blue-gray           NA        NA
## brown           159.25     185.5
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel              NaN        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , metal
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA       200
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , mottled green
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA       191
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , none
## 
##               feminine masculine
## black               NA       NaN
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , orange
## 
##               feminine masculine
## black               NA       188
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       196
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , pale
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA       188
## pink                NA       180
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA       184
## 
## , , red
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA       175
## 
## , , red, blue, white
## 
##               feminine masculine
## black              178        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , silver, red
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           96        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , tan
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA       187
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , unknown
## 
##               feminine masculine
## black               NA        NA
## blue                NA       228
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , white
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA       233
## 
## , , white, blue
## 
##               feminine masculine
## black               NA       122
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        96
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , white, red
## 
##               feminine masculine
## black               NA        NA
## blue                NA        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        97
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA
## 
## , , yellow
## 
##               feminine masculine
## black               NA        NA
## blue               168        NA
## blue-gray           NA        NA
## brown               NA        NA
## dark                NA        NA
## gold                NA        NA
## green, yellow       NA        NA
## hazel               NA        NA
## orange              NA        NA
## pink                NA        NA
## red                 NA        NA
## red, blue           NA        NA
## unknown             NA        NA
## white               NA        NA
## yellow              NA        NA

Relacionado

comments powered by Disqus
ORCID iD iconhttps://orcid.org/0000-0001-6733-4759