I need to group my data into 2 or 3 levels of selection and apply a function on each specific group. The command tapply does it when I use a standard function (mean, median, SD), but when I insert more than one filter variable it does not work.
The code:
tipo <- rep(LETTERS[1:3], 9)
vendedor <- rep(LETTERS[11:13], 9)
produto <- rep(LETTERS[17:19],9)
valor <- trunc(rnorm(27,1000,50))
dados <- data.frame(tipo, vendedor, produto, valor)
funcao <- function(dados) c(media = mean(valor),
desvio = sd(valor)*0.23)
simplify2array(tapply(dados$valor, dados$tipo, funcao))
simplify2array(tapply(dados$valor, list(dados$tipo, dados$vendedor), funcao))
The output of the command tapply 1, which works OK:
> simplify2array(tapply(dados$valor, dados$tipo, funcao))
A B C
media 998.370370 998.370370 998.370370
desvio 9.763732 9.763732 9.763732
The output of tapply 2 command, which does not work correctly:
> simplify2array(tapply(dados$valor, list(dados$tipo, dados$vendedor), funcao))
K L M
A Numeric,2 NULL NULL
B NULL Numeric,2 NULL
C NULL NULL Numeric,2
Does anyone know how I can fix this?