Problema
Por ejemplo, imaginemos que queremos calcular la media de las columnas del conjunto de datos trees, cargado por defecto en R. Deberemos especificar siempre el nombre del data frame (trees) seguido de $ y el nombre de la columna correspondiente.
mean(trees$Girth)
mean(trees$Height)
mean(trees$Volume)
[1] 13.24839
[1] 76
[1] 30.17097
Solución
Podemos obtener el mismo resultado con una sola línea de código, y sin necesidad de saber los nombres de las columnas, usando la función apply.
La sintaxis de apply(X, MARGIN, FUN, ...) es:
X la matriz o data frame
MARGIN para indicar la aplicación de la función. 1 indica por filas y 2 indica por columnas
FUN la función que deseamos aplicar
apply(trees, 2, mean)
Girth Height Volume
13.24839 76.00000 30.17097
Notas
En nuestro ejemplo, no necesitaríamos utilizar la función apply, pues hay una función que específicamente calcula la media por columnas colMeans. Lo mismo en el caso de la función suma con la función colSums. Estas funciones son equivalentes a apply con FUN = mean o FUN = sum con MARGIN = 2, pero son mucho más rápidas.
colMeans(trees)
Girth Height Volume
13.24839 76.00000 30.17097
colSums(trees)
Girth Height Volume
410.7 2356.0 935.3
Para otro tipo de funciones, sí que será aconsejable usar la función apply.
apply(trees, 2, shapiro.test) # Test de normalidad Shapiro-Wilk
$Girth
Shapiro-Wilk normality test
data: newX[, i]
W = 0.9412, p-value = 0.08893
$Height
Shapiro-Wilk normality test
data: newX[, i]
W = 0.9655, p-value = 0.4034
$Volume
Shapiro-Wilk normality test
data: newX[, i]
W = 0.8876, p-value = 0.003579
Referencias:
Una pregunta, como hago contar la cantidad de faltantes en cada columna?
ResponderEliminarHola! Cómo podría aplicar una función que necesita datos de dos columnas de un data frame?
ResponderEliminarHola Rocío. Plantea tu pregunta con un ejemplo reproducible en stackoverflow: https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example Saludos
Eliminar