Universidade Federal do Paraná
Curso de Estatística
CE 083 -
Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani
Tabela de conteúdo
##-----------------------------------------------------------------------------
## Revisão da família *apply e agregados: tarefas por margem ou estrato.
## Margem
## * apply: opera em arrays e data.frames.
## * lapply: opera em vetores e listas (data.frame é uma lista) .
## * sapply: idem à lapply mas simplifica quando possível.
## Estrato
## * tapply: um vetor reposta em função de (combinação de) estratos.
## Margin e estrato.
## * by.
## * aggregate.
##-----------------------------------------------------------------------------
## Lendo aquivo de dados.
getwd()
## [1] "/home/walmes/Dropbox/Ensino/ce083-2014-02/aulas"
list.files(pattern="*.csv")
## [1] "ipea_demografico2.csv" "ipea_demografico.csv" "ipea_habitacao.csv"
hab <- read.table("ipea_habitacao.csv", header=TRUE,
quote="", stringsAsFactors=FALSE,
sep=",")
## str(hab)
## Remove a última coluna que é desnecessária.
hab <- hab[,-ncol(hab)]
## Modifica para nomes curtos nas colunas.
names(hab) <- c("sig", "cod", "mun", "agua", "ener", "tel", "carro",
"comp", "tot")
hab <- transform(hab, sig=factor(sig))
str(hab, ve.len=1)
## 'data.frame': 5596 obs. of 9 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ cod : int 1200013 1200054 1200104 1200138 1200179 1200203 1200252 1200302 1200328 1200336 ...
## $ mun : chr "Acrelândia" "Assis Brasil" "Brasiléia" "Bujari" ...
## $ agua : num 21.5 27.4 26.9 17.3 13.1 ...
## $ ener : num 56.2 65.3 55.9 43.9 35.9 ...
## $ tel : num 8.85 26.71 22.73 12.28 9.19 ...
## $ carro: num 9.3 6.03 7.47 6.49 5.73 ...
## $ comp : num 0.947 1.637 1.857 0.127 0.088 ...
## $ tot : int 1878 807 4114 1365 1267 14368 2807 5268 740 2308 ...
##-----------------------------------------------------------------------------
## Tarefas por margem: média para o país para as variáveis de
## percentagem da tabela (agua, ener, tel, carro, comp).
## Seleção pelos nomes das colunas.
v <- c("agua","ener","tel","carro","comp")
apply(hab[,v], MARGIN=2, FUN=mean, na.rm=TRUE)
## agua ener tel carro comp
## 68.744 86.625 17.112 25.169 3.266
## Seleção pela posição das colunas.
v <- 4:8
apply(hab[,v], MARGIN=2, FUN=mean, na.rm=TRUE)
## agua ener tel carro comp
## 68.744 86.625 17.112 25.169 3.266
## A mesma coisa. Um data.frame é uma lista especial onde cada item é um
## vetor e todos são de mesmo comprimento, o que permite que sejam
## colocados lado a lado.
c(is.data.frame(hab), is.list(hab))
## [1] TRUE TRUE
lapply(hab[,v], FUN=mean, na.rm=TRUE)
## $agua
## [1] 68.74
##
## $ener
## [1] 86.63
##
## $tel
## [1] 17.11
##
## $carro
## [1] 25.17
##
## $comp
## [1] 3.266
sapply(hab[,v], FUN=mean, na.rm=TRUE) ## Simplificou pois foi possível.
## agua ener tel carro comp
## 68.744 86.625 17.112 25.169 3.266
## Usando uma função que retorna dois resultados.
apply(hab[,v], MARGIN=2, FUN=range, na.rm=TRUE)
## agua ener tel carro comp
## [1,] 0 16.85 0.029 0.011 0.002
## [2,] 100 100.00 91.387 79.561 41.405
sapply(hab[,v], FUN=range, na.rm=TRUE)
## agua ener tel carro comp
## [1,] 0 16.85 0.029 0.011 0.002
## [2,] 100 100.00 91.387 79.561 41.405
lapply(hab[,v], FUN=range, na.rm=TRUE)
## $agua
## [1] 0 100
##
## $ener
## [1] 16.85 100.00
##
## $tel
## [1] 0.029 91.387
##
## $carro
## [1] 0.011 79.561
##
## $comp
## [1] 0.002 41.405
## Se a função atribuir nomes aos elementos fica mais
## interessante. Função que retorna a média e o desvio padrão.
myfun <- function(x, ...){
c(media=mean(x, ...), desvpad=sd(x, ...))
}
apply(hab[,v], MARGIN=2, FUN=myfun, na.rm=TRUE)
## agua ener tel carro comp
## media 68.74 86.63 17.11 25.17 3.266
## desvpad 29.16 16.80 14.77 17.05 3.860
sapply(hab[,v], FUN=myfun, na.rm=TRUE)
## agua ener tel carro comp
## media 68.74 86.63 17.11 25.17 3.266
## desvpad 29.16 16.80 14.77 17.05 3.860
lapply(hab[,v], FUN=myfun, na.rm=TRUE)
## $agua
## media desvpad
## 68.74 29.16
##
## $ener
## media desvpad
## 86.63 16.80
##
## $tel
## media desvpad
## 17.11 14.77
##
## $carro
## media desvpad
## 25.17 17.05
##
## $comp
## media desvpad
## 3.266 3.860
##-----------------------------------------------------------------------------
## Tarefas por estrato. Média para cada Estado e por tamanho de
## município {G: >5000 domicílios, P: <=5000 domicílios}.
## Criando o fator tamanho de municípios baseado no número de
## domicílios.
hab <- transform(hab,
tam=cut(tot, breaks=c(-Inf, 5000, Inf),
labels=c("P","G")))
str(hab, ve.len=1)
## 'data.frame': 5596 obs. of 10 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ cod : int 1200013 1200054 1200104 1200138 1200179 1200203 1200252 1200302 1200328 1200336 ...
## $ mun : chr "Acrelândia" "Assis Brasil" "Brasiléia" "Bujari" ...
## $ agua : num 21.5 27.4 26.9 17.3 13.1 ...
## $ ener : num 56.2 65.3 55.9 43.9 35.9 ...
## $ tel : num 8.85 26.71 22.73 12.28 9.19 ...
## $ carro: num 9.3 6.03 7.47 6.49 5.73 ...
## $ comp : num 0.947 1.637 1.857 0.127 0.088 ...
## $ tot : int 1878 807 4114 1365 1267 14368 2807 5268 740 2308 ...
## $ tam : Factor w/ 2 levels "P","G": 1 1 1 1 1 2 1 2 1 1 ...
## Com tapply o resultado é um array.
x <- with(hab, tapply(comp, list(sig), FUN=mean, na.rm=TRUE))
str(x)
## num [1:27(1d)] 1.08 0.77 1.04 1.48 1.29 ...
## - attr(*, "dimnames")=List of 1
## ..$ : chr [1:27] "AC" "AL" "AM" "AP" ...
x
## AC AL AM AP BA CE DF ES GO MA MG
## 1.0841 0.7702 1.0410 1.4787 1.2931 0.9851 23.8680 4.0905 2.1180 0.6504 3.2524
## MS MT PA PB PE PI PR RJ RN RO RR
## 3.1344 2.5483 1.0932 0.7856 1.3516 0.4799 4.6262 7.4912 1.0397 1.7114 1.4207
## RS SC SE SP TO
## 4.8026 5.8452 1.1793 7.8973 0.8006
x <- with(hab, tapply(comp, list(sig, tam), FUN=mean, na.rm=TRUE))
str(x)
## num [1:27, 1:2] 0.703 0.533 0.763 0.792 0.84 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:27] "AC" "AL" "AM" "AP" ...
## ..$ : chr [1:2] "P" "G"
x
## P G
## AC 0.7028 2.381
## AL 0.5333 1.358
## AM 0.7629 1.912
## AP 0.7922 4.453
## BA 0.8405 2.101
## CE 0.6447 1.418
## DF NA 23.868
## ES 2.9042 5.591
## GO 1.5901 3.913
## MA 0.4457 1.129
## MG 2.3210 6.686
## MS 2.3348 4.798
## MT 2.0345 4.524
## PA 0.5522 1.780
## PB 0.4880 2.858
## PE 0.8412 1.914
## PI 0.3683 1.490
## PR 3.6839 7.908
## RJ 4.6886 8.674
## RN 0.7144 3.557
## RO 0.9016 3.241
## RR 0.9611 7.855
## RS 3.4822 8.988
## SC 4.5037 11.400
## SE 0.8294 2.211
## SP 5.3892 11.886
## TO 0.5788 3.662
## Com aggregate o resultado é data.frame.
x <- aggregate(comp~sig, data=hab, FUN=mean, na.rm=TRUE)
str(x)
## 'data.frame': 27 obs. of 2 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ comp: num 1.08 0.77 1.04 1.48 1.29 ...
head(x)
## sig comp
## 1 AC 1.0841
## 2 AL 0.7702
## 3 AM 1.0410
## 4 AP 1.4787
## 5 BA 1.2931
## 6 CE 0.9851
x <- aggregate(comp~tam+sig, data=hab, FUN=mean, na.rm=TRUE)
str(x)
## 'data.frame': 53 obs. of 3 variables:
## $ tam : Factor w/ 2 levels "P","G": 1 2 1 2 1 2 1 2 1 2 ...
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 1 2 2 3 3 4 4 5 5 ...
## $ comp: num 0.703 2.381 0.533 1.358 0.763 ...
head(x)
## tam sig comp
## 1 P AC 0.7028
## 2 G AC 2.3806
## 3 P AL 0.5333
## 4 G AL 1.3584
## 5 P AM 0.7629
## 6 G AM 1.9125
## Com by o resultado também é array.
x <- with(hab, by(comp, INDICES=tam, FUN=mean, na.rm=TRUE))
str(x)
## by [1:2(1d)] 2.26 5.94
## - attr(*, "dimnames")=List of 1
## ..$ tam: chr [1:2] "P" "G"
## - attr(*, "call")= language by.default(data = comp, INDICES = tam, FUN = mean, na.rm = TRUE)
x
## tam: P
## [1] 2.257
## -------------------------------------------------------------------
## tam: G
## [1] 5.937
x <- with(hab, by(comp, INDICES=list(tam, sig), FUN=mean, na.rm=TRUE))
str(x)
## by [1:2, 1:27] 0.703 2.381 0.533 1.358 0.763 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:2] "P" "G"
## ..$ : chr [1:27] "AC" "AL" "AM" "AP" ...
## - attr(*, "call")= language by.default(data = comp, INDICES = list(tam, sig), FUN = mean, na.rm = TRUE)
##-----------------------------------------------------------------------------
## Por margem e estrato.
x <- aggregate(as.matrix(hab[,v])~sig, data=hab, FUN=mean, na.rm=TRUE)
str(x)
## 'data.frame': 27 obs. of 6 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ agua : num 21.4 45.6 28.2 40.9 44.9 ...
## $ ener : num 54.6 83 63.3 84.9 70.1 ...
## $ tel : num 15.92 6.23 7.72 18.06 6.79 ...
## $ carro: num 6.2 7.75 3.16 7.19 11.15 ...
## $ comp : num 1.08 0.77 1.04 1.48 1.29 ...
head(x)
## sig agua ener tel carro comp
## 1 AC 21.37 54.64 15.918 6.202 1.0841
## 2 AL 45.56 83.01 6.229 7.747 0.7702
## 3 AM 28.20 63.33 7.719 3.158 1.0410
## 4 AP 40.86 84.95 18.063 7.192 1.4787
## 5 BA 44.87 70.10 6.786 11.153 1.2931
## 6 CE 40.75 80.39 8.870 8.836 0.9851
x <- aggregate(as.matrix(hab[,v])~tam+sig, data=hab, FUN=mean, na.rm=TRUE)
str(x)
## 'data.frame': 53 obs. of 7 variables:
## $ tam : Factor w/ 2 levels "P","G": 1 2 1 2 1 2 1 2 1 2 ...
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 1 2 2 3 3 4 4 5 5 ...
## $ agua : num 19.3 28.4 42.1 54 25.7 ...
## $ ener : num 51.3 66 81.2 87.5 61.1 ...
## $ tel : num 12.86 26.32 4.8 9.77 5.75 ...
## $ carro: num 5.4 8.94 7.07 9.43 1.98 ...
## $ comp : num 0.703 2.381 0.533 1.358 0.763 ...
head(x, n=10)
## tam sig agua ener tel carro comp
## 1 P AC 19.30 51.31 12.857 5.396 0.7028
## 2 G AC 28.39 65.96 26.323 8.942 2.3806
## 3 P AL 42.14 81.21 4.801 7.070 0.5333
## 4 G AL 54.04 87.48 9.772 9.429 1.3584
## 5 P AM 25.66 61.13 5.750 1.980 0.7629
## 6 G AM 36.17 70.22 13.889 6.847 1.9125
## 7 P AP 37.20 82.05 14.929 5.776 0.7922
## 8 G AP 56.72 97.52 31.641 13.331 4.4533
## 9 P BA 41.23 66.46 4.524 10.387 0.8405
## 10 G BA 51.38 76.61 10.825 12.521 2.1012
## Dá resultado igual.
## aggregate(cbind(agua,tel,carro,comp,ener)~sig, data=hab, FUN=mean, na.rm=TRUE)
myapplymean <- function(x, ...){
apply(x, MARGIN=2, FUN=mean, ...)
}
x <- with(hab, by(hab[,v], INDICES=list(tam, sig),
FUN=myapplymean, na.rm=TRUE))
str(head(x), width=3)
## List of 6
## $ : Named num [1:5] 19.302 51.305 12.857 5.396 0.703
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
## $ : Named num [1:5] 28.39 65.96 26.32 8.94 2.38
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
## $ : Named num [1:5] 42.143 81.209 4.801 7.07 0.533
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
## $ : Named num [1:5] 54.04 87.48 9.77 9.43 1.36
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
## $ : Named num [1:5] 25.662 61.127 5.75 1.98 0.763
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
## $ : Named num [1:5] 36.17 70.22 13.89 6.85 1.91
## ..- attr(*, "names")= chr [1:5] "agua" "ener" "tel" "carro" ...
head(x)
## [[1]]
## agua ener tel carro comp
## 19.3023 51.3054 12.8571 5.3958 0.7028
##
## [[2]]
## agua ener tel carro comp
## 28.393 65.957 26.323 8.942 2.381
##
## [[3]]
## agua ener tel carro comp
## 42.1434 81.2093 4.8015 7.0700 0.5333
##
## [[4]]
## agua ener tel carro comp
## 54.040 87.478 9.772 9.429 1.358
##
## [[5]]
## agua ener tel carro comp
## 25.6620 61.1271 5.7496 1.9804 0.7629
##
## [[6]]
## agua ener tel carro comp
## 36.169 70.215 13.889 6.847 1.912
## Atributos do objeto.
attr(x, "dimnames")
## [[1]]
## [1] "P" "G"
##
## [[2]]
## [1] "AC" "AL" "AM" "AP" "BA" "CE" "DF" "ES" "GO" "MA" "MG" "MS" "MT" "PA" "PB" "PE" "PI"
## [18] "PR" "RJ" "RN" "RO" "RR" "RS" "SC" "SE" "SP" "TO"
##-----------------------------------------------------------------------------
## Por margem, estrato e com função que retorna mais de um resultado.
x <- aggregate(as.matrix(hab[,v])~sig, data=hab, FUN=myfun, na.rm=TRUE)
str(x)
## 'data.frame': 27 obs. of 6 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ agua : num [1:27, 1:2] 21.4 45.6 28.2 40.9 44.9 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "media" "desvpad"
## $ ener : num [1:27, 1:2] 54.6 83 63.3 84.9 70.1 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "media" "desvpad"
## $ tel : num [1:27, 1:2] 15.92 6.23 7.72 18.06 6.79 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "media" "desvpad"
## $ carro: num [1:27, 1:2] 6.2 7.75 3.16 7.19 11.15 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "media" "desvpad"
## $ comp : num [1:27, 1:2] 1.08 0.77 1.04 1.48 1.29 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr "media" "desvpad"
head(x)
## sig agua.media agua.desvpad ener.media ener.desvpad tel.media tel.desvpad carro.media
## 1 AC 21.37 11.72 54.635 17.954 15.918 12.503 6.202
## 2 AL 45.56 19.59 83.009 11.528 6.229 5.708 7.747
## 3 AM 28.20 14.57 63.326 14.160 7.719 7.376 3.158
## 4 AP 40.86 16.18 84.947 9.625 18.063 12.254 7.192
## 5 BA 44.87 16.46 70.100 17.146 6.786 6.939 11.153
## 6 CE 40.75 15.44 80.394 11.535 8.870 6.704 8.836
## carro.desvpad comp.media comp.desvpad
## 1 5.251 1.0841 1.2766
## 2 3.013 0.7702 1.1256
## 3 4.427 1.0410 1.3773
## 4 4.435 1.4787 1.6799
## 5 4.261 1.2931 1.4372
## 6 3.594 0.9851 1.1497
names(x)
## [1] "sig" "agua" "ener" "tel" "carro" "comp"
head(x$agua)
## media desvpad
## [1,] 21.37 11.72
## [2,] 45.56 19.59
## [3,] 28.20 14.57
## [4,] 40.86 16.18
## [5,] 44.87 16.46
## [6,] 40.75 15.44
length(x) ## Número de coluas (itens).
## [1] 6
str(x$agua)
## num [1:27, 1:2] 21.4 45.6 28.2 40.9 44.9 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:2] "media" "desvpad"
## O resultado é um data.frame (que é uma lista) em que as colunas
## (itens) são matrizes de duas colunas onde uma é a média e a outra é o
## desvio-padrão.
##-----------------------------------------------------------------------------
## Funções do pacote plyr.
require(plyr)
## Loading required package: plyr
## help(package="plyr", help_type="html")
## Funções que terminam com ply e tem dois digitos no começo que são a,
## d ou l.
apropos("^[adl][adl]ply$")
## [1] "aaply" "adply" "alply" "daply" "ddply" "dlply" "laply" "ldply" "llply"
## A primeira letra define o tipo de objeto do input, a segunda é o tipo
## de objeto retornado como output. a=array, d=data.frame e l=lista.
##-----------------------------------------------------------------------------
## Tarefas por margem.
## Para todas as colunas, sem restrições.
colwise(mean, na.rm=TRUE)(hab)
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## Warning: argument is not numeric or logical: returning NA
## sig cod mun agua ener tel carro comp tot tam
## 1 NA 3253647 NA 68.74 86.63 17.11 25.17 3.266 8264 NA
## Só para as colunas de interesse.
colwise(mean, na.rm=TRUE)(hab[,v])
## agua ener tel carro comp
## 1 68.74 86.63 17.11 25.17 3.266
## Só para as colunas numéricas.
colwise(mean, .cols=is.numeric, na.rm=TRUE)(hab)
## cod agua ener tel carro comp tot
## 1 3253647 68.74 86.63 17.11 25.17 3.266 8264
## Para as colunas com nomes passados.
colwise(mean, .cols=~agua+tel, na.rm=TRUE)(hab)
## agua tel
## 1 68.74 17.11
## Usando uma função que retorna mais de um valor.
colwise(myfun, na.rm=TRUE)(hab[,v])
## agua ener tel carro comp
## 1 68.74 86.63 17.11 25.17 3.266
## 2 29.16 16.80 14.77 17.05 3.860
##-----------------------------------------------------------------------------
## Tarefa por estrato e margem.
## help(ddply, help_type="html")
## x <- ddply(hab, ~sig, colwise(mean, .cols=is.numeric, na.rm=TRUE))
x <- ddply(hab, ~sig,
colwise(mean, .cols=~agua+ener+tel+carro+comp, na.rm=TRUE))
str(x)
## 'data.frame': 27 obs. of 6 variables:
## $ sig : Factor w/ 27 levels "AC","AL","AM",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ agua : num 21.4 45.6 28.2 40.9 44.9 ...
## $ ener : num 54.6 83 63.3 84.9 70.1 ...
## $ tel : num 15.92 6.23 7.72 18.06 6.79 ...
## $ carro: num 6.2 7.75 3.16 7.19 11.15 ...
## $ comp : num 1.08 0.77 1.04 1.48 1.29 ...
head(x)
## sig agua ener tel carro comp
## 1 AC 21.37 54.64 15.918 6.202 1.0841
## 2 AL 45.56 83.01 6.229 7.747 0.7702
## 3 AM 28.20 63.33 7.719 3.158 1.0410
## 4 AP 40.86 84.95 18.063 7.192 1.4787
## 5 BA 44.87 70.10 6.786 11.153 1.2931
## 6 CE 40.75 80.39 8.870 8.836 0.9851
xtabs(~tam+sig, hab)
## sig
## tam AC AL AM AP BA CE DF ES GO MA MG MS MT PA PB PE PI PR RJ RN RO
## P 17 72 47 13 266 103 0 43 187 152 671 52 100 80 195 97 199 310 27 147 34
## G 5 29 15 3 149 81 1 34 55 65 182 25 26 63 28 88 22 89 64 19 18
## sig
## tam RR RS SC SE SP TO
## P 14 355 236 56 396 129
## G 1 112 57 19 249 10
## x <- ddply(hab, c("sig","tam"), colwise(mean, v, na.rm=TRUE), .drop=TRUE)
## x <- ddply(hab, .(sig, tam), colwise(mean, v, na.rm=TRUE), .drop=TRUE)
x <- ddply(hab, ~sig+tam,
colwise(.fun=mean,
.cols=~agua+ener+tel+carro+comp, na.rm=TRUE), .drop=TRUE)
head(x) ## Não sei por qual razão aparecem NA e NaN. Vou investigar.
## sig tam agua ener tel carro comp
## 1 AC P 19.30 51.31 12.857 5.396 0.7028
## 2 AC G 28.39 65.96 26.323 8.942 2.3806
## 3 AL P 42.14 81.21 4.801 7.070 0.5333
## 4 AL G 54.04 87.48 9.772 9.429 1.3584
## 5 AL <NA> NaN NaN NaN NaN NaN
## 6 AM P 25.66 61.13 5.750 1.980 0.7629
## Aplicando uma estatística para cada variável.
x <- ddply(hab, ~sig, summarise,
magua=mean(agua, na.rm=TRUE),
stot=sum(tot, na.rm=TRUE),
vcomp=var(comp, na.rm=TRUE),
mtel=median(tel, na.rm=TRUE))
head(x)
## sig magua stot vcomp mtel
## 1 AC 21.37 131580 1.630 14.780
## 2 AL 45.56 658873 1.267 4.529
## 3 AM 28.20 580900 1.897 6.316
## 4 AP 40.86 100765 2.822 13.540
## 5 BA 44.87 3214292 2.065 4.591
## 6 CE 40.75 1773393 1.322 7.106
##-----------------------------------------------------------------------------
## Combinando várias funções em uma só.
each(mean, median, sum, sd)(na.omit(hab$agua))
## mean median sum sd
## 68.74 80.32 378571.28 29.16
c(mean(hab$agua, na.rm=TRUE), median(hab$agua, na.rm=TRUE),
sum(hab$agua, na.rm=TRUE), sd(hab$agua, na.rm=TRUE))
## [1] 68.74 80.32 378571.28 29.16
##-----------------------------------------------------------------------------
## Usando funções que retornam mais de um resultado, avaliando várias
## colunas e dividindo por estrato.
x <- ddply(hab, ~sig, colwise(myfun, ~agua+ener, na.rm=TRUE))
head(x)
## sig agua ener
## 1 AC 21.37 54.64
## 2 AC 11.72 17.95
## 3 AL 45.56 83.01
## 4 AL 19.59 11.53
## 5 AM 28.20 63.33
## 6 AM 14.57 14.16
##-----------------------------------------------------------------------------
## Escrevendo tabelas em arquivos de texto.
tabresumo <- aggregate(as.matrix(hab[,v])~sig, data=hab, FUN=myfun, na.rm=TRUE)
head(tabresumo)
## sig agua.media agua.desvpad ener.media ener.desvpad tel.media tel.desvpad carro.media
## 1 AC 21.37 11.72 54.635 17.954 15.918 12.503 6.202
## 2 AL 45.56 19.59 83.009 11.528 6.229 5.708 7.747
## 3 AM 28.20 14.57 63.326 14.160 7.719 7.376 3.158
## 4 AP 40.86 16.18 84.947 9.625 18.063 12.254 7.192
## 5 BA 44.87 16.46 70.100 17.146 6.786 6.939 11.153
## 6 CE 40.75 15.44 80.394 11.535 8.870 6.704 8.836
## carro.desvpad comp.media comp.desvpad
## 1 5.251 1.0841 1.2766
## 2 3.013 0.7702 1.1256
## 3 4.427 1.0410 1.3773
## 4 4.435 1.4787 1.6799
## 5 4.261 1.2931 1.4372
## 6 3.594 0.9851 1.1497
write.table(x=tabresumo, file="tabela.txt",
row.names=FALSE, quote=FALSE, sep="\t")
write.table(x=tabresumo, file="tabela.xls",
row.names=FALSE, quote=FALSE, sep="\t")
list.files(pattern="tabela.*")
## [1] "tabela.txt" "tabela.xls"