Función apply()

La función apply() en R aplica una función a un dataframe, matriz, lista o vector, eligiendo si se va a aplicar a las filas o a las columnas. El resultado de esta función depende del tipo de objeto (lista, vector, etc…) que se utiliza (x).

apply(x, MARGIN, FUN)
# x : matriz, dataframe, lista o vector.
# MARGIN: 1 para operar sobre las filas y 2 para operar sobre las columnas.
# FUN: Función que se aplica sobre filas o columnas.

Ejemplo: Imaginemos que tenemos 6 niños, que asisten a 2 colegios diferentes, y contamos con los días asistidos y los días totales. Y queremos calcular los días promedio asistidos y totales por todos los niños.

df = data.frame("NOMBRES" = c("Ana","Javiera","José","Juan","Miguel", "María"),
                "LUGAR_ASISTIR" = c("Lugar1", "Lugar2", "Lugar1", "Lugar2", "Lugar1", "Lugar1"),
                "DIAS_ASISTIDOS" = c(8,7,10,5,6,10),
                "DIAS_TOTALES" = c(10,10,10,10,10,10))
df
##   NOMBRES LUGAR_ASISTIR DIAS_ASISTIDOS DIAS_TOTALES
## 1     Ana        Lugar1              8           10
## 2 Javiera        Lugar2              7           10
## 3    José        Lugar1             10           10
## 4    Juan        Lugar2              5           10
## 5  Miguel        Lugar1              6           10
## 6   María        Lugar1             10           10

Entonces ejecutamos la consulta:

apply(df[,c(3,4)], 2, mean)
## DIAS_ASISTIDOS   DIAS_TOTALES 
##       7.666667      10.000000

Función lapply()

La función lapply() en R está hecha para realizarle operaciones a una lista, pero igual admite otro tipo de objeto. La diferencia con la función apply() es que la función devuelve una lista.

lapply(x, FUN)
# x : matriz, dataframe, lista o vector.
# FUN: Función que se aplica sobre filas o columnas.

Ejemplo: Queremos calcular los días promedio asistidos y totales por todos los niños.

df
##   NOMBRES LUGAR_ASISTIR DIAS_ASISTIDOS DIAS_TOTALES
## 1     Ana        Lugar1              8           10
## 2 Javiera        Lugar2              7           10
## 3    José        Lugar1             10           10
## 4    Juan        Lugar2              5           10
## 5  Miguel        Lugar1              6           10
## 6   María        Lugar1             10           10

Entonces ejecutamos la consulta:

lapply(df[,c(3,4)], mean)
## $DIAS_ASISTIDOS
## [1] 7.666667
## 
## $DIAS_TOTALES
## [1] 10

Podemos ver que obtenermos el mismo resultado anterior pero en una lista.

Función sapply()

La función sapply() en R está hecha para realizarle operaciones a una lista, pero igual admite otro tipo de objeto La diferencia con la función apply() es que la función devuelve un vector.

sapply(x, FUN)
# x : matriz, dataframe, lista o vector.
# FUN: Función que se aplica sobre filas o columnas.

Ejemplo: Queremos calcular los días promedio asistidos y totales por todos los niños.

df
##   NOMBRES LUGAR_ASISTIR DIAS_ASISTIDOS DIAS_TOTALES
## 1     Ana        Lugar1              8           10
## 2 Javiera        Lugar2              7           10
## 3    José        Lugar1             10           10
## 4    Juan        Lugar2              5           10
## 5  Miguel        Lugar1              6           10
## 6   María        Lugar1             10           10

Entonces ejecutamos la consulta:

sapply(df[,c(3,4)], mean)
## DIAS_ASISTIDOS   DIAS_TOTALES 
##       7.666667      10.000000

Podemos ver que el resultado de la función es un vector.

Función tapply()

La función tapply() en R, le aplica una función a los datos agrupados.

tapply(x,  INDEX,  FUN)
# x : matriz, dataframe, lista o vector.
# INDEX: lista de categorías a agrupar.
# FUN: Función que se aplica sobre filas o columnas.

Ejemplo: Si queremos saber cuales son los días de asistencia promedio por lugar_asistir.

df
##   NOMBRES LUGAR_ASISTIR DIAS_ASISTIDOS DIAS_TOTALES
## 1     Ana        Lugar1              8           10
## 2 Javiera        Lugar2              7           10
## 3    José        Lugar1             10           10
## 4    Juan        Lugar2              5           10
## 5  Miguel        Lugar1              6           10
## 6   María        Lugar1             10           10

Entonces ejecutamos la consulta:

tapply(df$DIAS_ASISTIDOS,df$LUGAR_ASISTIR, mean)
## Lugar1 Lugar2 
##    8.5    6.0

Función mapply()

La función mapply() en R, realiza operaciones entre matrices y devuelve una lista o vector.

mapply(FUN, arg1, arg2)
# FUN: Función que se aplica sobre filas o columnas.
#arg1, arg2: matrices que se va a operar. 

Ejemplo: Ahora queremos la proporción de dias_asistidos sobre dias_totales por niño.

df
##   NOMBRES LUGAR_ASISTIR DIAS_ASISTIDOS DIAS_TOTALES
## 1     Ana        Lugar1              8           10
## 2 Javiera        Lugar2              7           10
## 3    José        Lugar1             10           10
## 4    Juan        Lugar2              5           10
## 5  Miguel        Lugar1              6           10
## 6   María        Lugar1             10           10

Entonces ejecutamos la consulta:

f <- function(a,b) a/b

mapply(f,df$DIAS_ASISTIDOS, df$DIAS_TOTALES)
## [1] 0.8 0.7 1.0 0.5 0.6 1.0