A função tapply() calcula alguma funcão sobre um vetor numérico para cada categoria de um fator.
Já a função aggregate() faz o mesmo, mas permite múltiplos fatores e sempre retorna um data.frame.
Vamos usar dados de parcelas em caixetais, formações dominadas por Tabebuia cassinoides (Lam.) D.C. (Bignoniaceae), espécie comum da Mata Atlântica nos estados de São Paulo, Minas Gerais, Rio de Janeiro e Espírito Santo.
Baixe o arquivo para seu computador e instale-o na sua pasta de trabalho antes de seguir com os comandos abaixo.
# circunferencia máxima por especieob1 <-aggregate(caixeta$cap, by =list(especie = caixeta$especie), FUN = max)class(ob1) # obtenho um data frame
## [1] "data.frame"
head(ob1)
especie
x
Alchornea triplinervia
840
Andira fraxinifolia
340
bombacaceae
380
Cabralea canjerana
720
Callophyllum brasiliensis
1130
Calophyllum brasiliensis
2100
# neste caso também poderia fazer assimob2 <-tapply(caixeta$h, caixeta$especie, max)class(ob2) # mas neste caso nos temos um array (um vetor unidimensional)
# mas se eu quiser por localidade e por especie, preciso usar aggregatecaixeta.alt <-aggregate(caixeta$h, by =list(local = caixeta$local, especie = caixeta$especie), FUN = max)
head(caixeta.alt)
local
especie
x
jureia
Alchornea triplinervia
140
retiro
Alchornea triplinervia
100
jureia
Andira fraxinifolia
90
jureia
bombacaceae
150
jureia
Cabralea canjerana
150
chauas
Callophyllum brasiliensis
200
## Vamos calcular a area basal (soma da area de todo os fustes)## calculando a area basal de cada fuste, considerando o fuste um círculo perfeito, poderíamos usar:caixeta$ab <- caixeta$cap^2/4* pi## e agora criamos a planilha, com aggregate, somando as areas basais dos fustescaixeta.2<-aggregate(caixeta$ab, by =list(local = caixeta$local, parcela = caixeta$parcela, especie = caixeta$especie), FUN = sum)class(caixeta.2)