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
## [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"
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"
## 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"
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
|