13.3 Variável numérica vs. fator

A função tapply() faz uso de uma função sobre sobre um vetor numérico para cada categoria de um fator. A função aggregate() faz o mesmo, mas permite múltiplos fatores e retorna um data.frame.

## tapply: resumo de uma variavel numerica, separada por niveis de um ou mais fatores
?tapply # veja o help dessa função
head(avesc) # se nao tem isso, importe novamente o arquivo aves_cerrado
fisionomia urubu carcara seriema
Ce1 Ce 5 18 6
Ce2 Ce 7 7 6
Ce3 Ce 5 14 4
Ce4 Ce 3 12 5
Ce5 Ce 4 16 4
Ce6 Ce NA 20 NA
# número de individuos de carcara por fisionomia
tapply(avesc$carcara, avesc$fisionomia, sum)
##  CC  ce  Ce  CL 
## 212  14 291  NA
# numero de individuos de urubo por fisionomia
tapply(avesc$urubu, avesc$fisionomia, sum)
##  CC  ce  Ce  CL 
## 299  13  NA 298
# numero médio de seriemas por localidade+fisionomia
tapply(avesc$seriema, avesc$fisionomia, mean)
##  CC  ce  Ce  CL 
##  NA 4.0  NA 5.6
## "Tabelas dinamicas": funcao aggregate
## Criar data.frame com altura media dos fustes por especie e por local
?aggregate # veja o help dessa função
names(caixeta)
## [1] "local"   "parcela" "arvore"  "fuste"   "cap"     "h"       "especie"
# circunferencia máxima por especie
ob1 <- 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 assim
ob2 <- tapply(caixeta$h, caixeta$especie, max)
class(ob2) # mas neste caso nos temos um array (um vetor unidimensional)
## [1] "array"
ob2[1:10]
##    Alchornea triplinervia       Andira fraxinifolia               bombacaceae 
##                       140                        90                       150 
##        Cabralea canjerana Callophyllum brasiliensis  Calophyllum brasiliensis 
##                       150                       200                       160 
##               Cecropia sp      Coussapoa macrocarpa       Coussapoa micropoda 
##                        70                       100                       110 
##      Cryptocaria moschata 
##                       140
# mas se eu quiser por localidade e por especie, preciso usar aggregate
caixeta.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 fustes
caixeta.2 <- aggregate(caixeta$ab, by = list(local = caixeta$local, parcela = caixeta$parcela, especie = caixeta$especie), FUN = sum)
class(caixeta.2)
## [1] "data.frame"
head(caixeta.2)
local parcela especie x
retiro 1 Alchornea triplinervia 53092.92
jureia 2 Alchornea triplinervia 554176.94
retiro 2 Alchornea triplinervia 90949.11
retiro 3 Alchornea triplinervia 230121.66
jureia 4 Alchornea triplinervia 292246.66
jureia 5 Alchornea triplinervia 273397.10