Usando librería de mtcars, se sacará el promedio de cada columna.
mean(mtcars$mpg)
## [1] 20.09062
mean(mtcars$cyl)
## [1] 6.1875
# Esto no es tan eficiente
Se puede hacer de forma automatizada con for o apply:
Primero con un data frame y vector vacío:
resultado<-data.frame()
promedios<-c()
for (u in colnames(mtcars)) {
promedios <- c(promedios, mean (mtcars[, u]))
}
promedios
## [1] 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250
## [7] 17.848750 0.437500 0.406250 3.687500 2.812500
resultado<-rbind(promedios, resultado)
colnames(resultado)<-colnames(mtcars)
# Esta opción es extensa, por eso se usará la función apply
En apply tenemos como primer parámetro un data frame pero también puede ser una matriz, como segundo argumento le pasamos “margin” y el vañor de 2 (columnas) y 1 (renglones). Y como tercer argumento una función. En apply no lleva paréntesis. El apply sustituye al for en algunas ocasiones y es más rápido que for.
# Con data frame
apply(mtcars, MARGIN = 1, median)
## Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
## 4.000 4.000 4.000 3.215
## Hornet Sportabout Valiant Duster 360 Merc 240D
## 3.440 3.460 4.000 4.000
## Merc 230 Merc 280 Merc 280C Merc 450SE
## 4.000 4.000 4.000 4.070
## Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental
## 3.730 3.780 5.250 5.424
## Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla
## 5.345 4.000 4.000 4.000
## Toyota Corona Dodge Challenger AMC Javelin Camaro Z28
## 3.700 3.520 3.435 4.000
## Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa
## 3.845 4.000 4.430 4.000
## Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E
## 5.000 6.000 8.000 4.000
# Con matriz
mi_matriz<-matrix(1:9, nrow = 3, ncol = 3)
mi_matriz
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
apply(mi_matriz, 2, mean)
## [1] 2 5 8
Se diferencia de apply, en vez de recibir un data frame o una matriz, lapply recibe una lista y como resultado arroja otra lista.
l<-list(a = 1:10, b = 11:20)
lapply(l, mean)
## $a
## [1] 5.5
##
## $b
## [1] 15.5
lapply(l, sum)
## $a
## [1] 55
##
## $b
## [1] 155
class(lapply(l, sum))
## [1] "list"
A diferencia del anterior, a pesar de que sapply también trabaja con listas, el resultado es un vector o una lista. La diferencia está en la forma del resultado.
s<-list(a = 1:10, b = 11:20)
sapply(s, mean)
## a b
## 5.5 15.5
Realiza operaciones sobre grupo. Por ejemplo, si queremos sacar el promedio de las millas por galón pero agrupados por cilindros…
tapply(mtcars$mpg, mtcars$cyl, mean)
## 4 6 8
## 26.66364 19.74286 15.10000
# Suma de millas por galón
tapply(mtcars$mpg, mtcars$cyl, sum)
## 4 6 8
## 293.3 138.2 211.4
mapply(function(x, y){x*y}, x = 5, y = 20)
## [1] 100
# Mapply sustituye X y Y en la función
mapply(summary, mtcars)
## mpg cyl disp hp drat wt qsec vs
## Min. 10.40000 4.0000 71.1000 52.0000 2.760000 1.51300 14.50000 0.0000
## 1st Qu. 15.42500 4.0000 120.8250 96.5000 3.080000 2.58125 16.89250 0.0000
## Median 19.20000 6.0000 196.3000 123.0000 3.695000 3.32500 17.71000 0.0000
## Mean 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375
## 3rd Qu. 22.80000 8.0000 326.0000 180.0000 3.920000 3.61000 18.90000 1.0000
## Max. 33.90000 8.0000 472.0000 335.0000 4.930000 5.42400 22.90000 1.0000
## am gear carb
## Min. 0.00000 3.0000 1.0000
## 1st Qu. 0.00000 3.0000 2.0000
## Median 0.00000 4.0000 2.0000
## Mean 0.40625 3.6875 2.8125
## 3rd Qu. 1.00000 4.0000 4.0000
## Max. 1.00000 5.0000 8.0000
# También:
summary(mtcars)
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000