Já vimos a função table() para contar valores em fatores e vetores em casos de univariados.
Podemos usar a mesma função para gerar tabelas de contingência entre dois ou mais fatores.
## Numero de fustes de cada especie por localtb <-table(caixeta$especie, caixeta$local)class(tb)
## [1] "table"
tb
chauas
jureia
retiro
Alchornea triplinervia
0
3
12
Andira fraxinifolia
0
4
0
bombacaceae
0
1
0
Cabralea canjerana
0
4
0
Callophyllum brasiliensis
7
0
0
Calophyllum brasiliensis
0
4
0
Cecropia sp
0
0
1
Coussapoa macrocarpa
0
3
0
Coussapoa micropoda
2
0
7
Cryptocaria moschata
0
2
0
Cyathea sp
0
0
2
Eugenia oblongata
0
0
2
eugenia3
0
1
0
fabaceae1
0
1
0
Ficus sp
0
2
0
Gomidesia sp
0
1
0
Ilex durosa
0
8
0
Ilex sp
0
0
2
indet.1
1
0
0
indet.2
1
0
0
indet.3
1
0
0
Inga sp
0
4
0
Jacaranda puberula
0
2
0
jussara
0
37
0
Matayba sp
0
1
0
Mela 1
0
0
63
Mela 2
0
0
2
Myrcia sulfiflora
96
0
0
Myrtaceae 3
0
0
3
myrtaceae1
4
0
0
myrtaceae2
1
0
0
myrtaceae4
1
0
0
Pera glabrata
0
1
0
Persea sp
0
3
0
Pisonia sp
0
2
0
Psidium sp
3
17
0
Simplocos sp
0
2
0
Solanum sp1
0
0
1
Solanum sp2
0
0
1
Syagrus romanzoffianus
1
0
0
Tabebuia 1
0
0
10
Tabebuia cassinoides
306
138
254
Tibouchina nutticeps
2
0
0
# convertemos num data.frametb <-as.data.frame.matrix(tb)class(tb)
## [1] "data.frame"
# calculo o total de individuos por especietotal <-apply(tb, 1, sum)total
# ordeno minha tabela orginal pelo total em ordem decrescente de abundânciatb <- tb[order(total, decreasing = T), ]
head(tb)
chauas
jureia
retiro
Tabebuia cassinoides
306
138
254
Myrcia sulfiflora
96
0
0
Mela 1
0
0
63
jussara
0
37
0
Psidium sp
3
17
0
Alchornea triplinervia
0
3
12
# se eu quiser uma tabela de presença e ausência# bastaria substituir os valores>0 por 1tb[tb >0] <-1
head(tb)
chauas
jureia
retiro
Tabebuia cassinoides
1
1
1
Myrcia sulfiflora
1
0
0
Mela 1
0
0
1
jussara
0
1
0
Psidium sp
1
1
0
Alchornea triplinervia
0
1
1
# assim, agora eu posso saber quantas especie por localidadeapply(tb, 2, sum)
## chauas jureia retiro
## 13 22 13
A função xtabs() tabula dados de frequência.
## xtabs: tabulacao de dados de frequencia## Vamos usar Dataframe dos sobreviventes dos sobreviventes e mortos do Titanic?Titanic # veja o que são esses dados
data("Titanic") # puxamos esse dadoclass(Titanic)
## [1] "table"
tit <-as.data.frame(Titanic) # converte em data.framehead(tit)
## Precisamos da funcao xtabs?xtabs # veja o help dessa funcão:
xtabs(Freq ~ Sex + Survived, data = tit)
No
Yes
Male
1364
367
Female
126
344
# em porcentagemtb <-xtabs(Freq ~ Sex + Survived, data = tit)
prop.table(tb, margin =1)
No
Yes
Male
0.7879838
0.2120162
Female
0.2680851
0.7319149
# ou, se preferirround(prop.table(tb, margin =1) *100)
No
Yes
Male
79
21
Female
27
73
# Quanto sobreviventes por classe de viagem?xtabs(Freq ~ Class + Survived, data = tit)
No
Yes
1st
122
203
2nd
167
118
3rd
528
178
Crew
673
212
# note que na primeira classe 203 sobreviveram# eu poderia ter perguntado isso assim:sum(tit[tit$Class =="1st"& tit$Survived =="Yes", "Freq"])
## [1] 203
# ou seja, a funcao xtabs calculou a soma da frequencia# porcentagemprop.table(xtabs(Freq ~ Class + Survived, data = tit), margin =1)
No
Yes
1st
0.3753846
0.6246154
2nd
0.5859649
0.4140351
3rd
0.7478754
0.2521246
Crew
0.7604520
0.2395480
## E para combinacoes de mais de duas variaveistb2 <-xtabs(Freq ~ Class + Survived + Sex, data = tit)
tb2 # veja o resultado e observe duas virgulas
Class
Survived
Sex
Freq
1st
No
Male
118
2nd
No
Male
154
3rd
No
Male
422
Crew
No
Male
670
1st
Yes
Male
62
2nd
Yes
Male
25
3rd
Yes
Male
88
Crew
Yes
Male
192
1st
No
Female
4
2nd
No
Female
13
3rd
No
Female
106
Crew
No
Female
3
1st
Yes
Female
141
2nd
Yes
Female
93
3rd
Yes
Female
90
Crew
Yes
Female
20
tb2[, , 1] # para Female
No
Yes
1st
118
62
2nd
154
25
3rd
422
88
Crew
670
192
tb2[, , 2] # note que não vimos isso antes, tb2, neste caso é um array, que um objeto que pode ter múltiplas dimensões, por isso as duas vírgulas, porque tem 3 dimensoes