Apply family functions - Part 2

The tapply() function

In this second part of the post series on the apply family of functions, it is the tapply() function. Unlike the apply () function discussed in the first post, the tapply() function is often used to apply a function to subsets of a vector. Usually, when working with databases, there are variables of different nature, some can be numerical, others categorical, the idea of tapply() is to obtain summaries of a vector but being grouped concerning other vectors (variables).

On this occasion, we will use the starwars database seen in the post on the inspectdf package again.

If we need to know the average height of the characters, execute the following command.

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

However, it is more valuable to obtain the average height according to another variable of interest that allows us to make some comparison, such as gender. For this, we can use the tapply() function.

tapply(X=starwars$height,     
       INDEX=starwars$gender, 
       FUN=mean)              
##  feminine masculine 
##        NA        NA

The NA that appear are due to missing values within the database, so the mean() function does not calculate the average correctly unless an imputation of these missing values is made or indicated that the mean() function must omit the missing values using the argument na.rm = TRUE. In most of the apply family functions, the arguments that belong to the function being applied (in this case mean()) must go after the FUN argument.

tapply(X=starwars$height,     
       INDEX=starwars$gender,
       FUN=mean,              
       na.rm=TRUE)            
##  feminine masculine 
##  164.6875  176.5161

The tapply() function is not limited to a single grouping variable. The same “dimensions” concept that we discuss in the apply () function can be used to tapply(), but this time the grouping variables must be specified within a list. As an example, suppose we are interested in the average height according to gender and eye color.

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

We can add more grouping variables, but all of them must be within the list. For example, it is possible to grouping also by the skin color, although in this case, the result would show many missing values because not all combinations exist. That is a demonstration that each time we grouping variables, these groupings should make sense; otherwise, the analysis will not be useful.

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

Related

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