Múltiples funciones en una sola instrucción tapply o agregada
¿Es posible incluir dos funciones dentro de una sola declaración tapply o agregada?
A continuación utilizo dos declaraciones de tapply y dos declaraciones agregadas: una para media y otra para SD.
Preferiría combinar las declaraciones.
my.Data = read.table(text = "
animal age sex weight
1 adult female 100
2 young male 75
3 adult male 90
4 adult female 95
5 young female 80
", sep = "", header = TRUE)
with(my.Data, tapply(weight, list(age, sex), function(x) {mean(x)}))
with(my.Data, tapply(weight, list(age, sex), function(x) {sd(x) }))
with(my.Data, aggregate(weight ~ age + sex, FUN = mean)
with(my.Data, aggregate(weight ~ age + sex, FUN = sd)
# this does not work:
with(my.Data, tapply(weight, list(age, sex), function(x) {mean(x) ; sd(x)}))
# I would also prefer that the output be formatted something similar to that
# show below. `aggregate` formats the output perfectly. I just cannot figure
# out how to implement two functions in one statement.
age sex mean sd
adult female 97.5 3.535534
adult male 90 NA
young female 80.0 NA
young male 75 NA
Siempre puedo ejecutar dos sentencias separadas y fusionar la salida. Solo esperaba que pudiera haber una solución un poco más conveniente.
Encontré la respuesta a continuación publicada aquí:Aplicar múltiples funciones a la columna usando tapply
f <- function(x) c(mean(x), sd(x))
do.call( rbind, with(my.Data, tapply(weight, list(age, sex), f)) )
Sin embargo, ni las filas ni las columnas están etiquetadas.
[,1] [,2]
[1,] 97.5 3.535534
[2,] 80.0 NA
[3,] 90.0 NA
[4,] 75.0 NA
Preferiría una solución en base R. Una solución delplyr
paquete fue publicado en el enlace de arriba. Si puedo agregar los encabezados de fila y columna correctos a la salida anterior, sería perfecto.