############################################################### # dplyr tem 5 commandos básicos para manipular data.frames # # filter -- selecionar observações (linhas do data.frame) # select -- selecionar variáveis (colunas do data.frame) # mutate -- criar novas variáveis no data.frame # arrange -- ordenar observações # group_by + summarize -- criar novas variáveis que sintetizam as atuais # # E com o pipe (%>%) pode-se fazer uma cadeia de comandos ############################################################### library(dplyr) # data.frame D vai conter dados de fecund. para os 5564 municip. no censo de 2010 url = 'http://ufrn.schmert.net/dados/munic2010.csv' D = read.csv(url, stringsAsFactors = FALSE) head(D) ########## # filter # ########## # só observações da mesoregião Norte Fluminense filter(D, meso == 'Norte Fluminense') # só observações do RN e microregião Serra de Santana filter(D, sigla =='RN', micro == 'Serra de Santana') # só observações da microregião que contém Sem-Peixe MG # e com com mais de que 50 mulheres 20-24 indice = which(D$munic == 'Sem-Peixe' & D$sigla == 'MG' ) filter(D, micro == micro[indice], Mu20 > 50) ########## # select # ########## # só as colunas munic, sigla, Mu20, e Cr20 tmp = select(D, munic, sigla, Mu20, Cr20) head(tmp) # todas as colunas MENOS meso, micro, e CrXX tmp = select(D, -meso, -micro, -contains('Cr')) head(tmp) ########## # mutate # ########## # soma de Mulheres e Crianças recem-nascidas tmp = mutate(D, Mu = Mu15+Mu20+Mu25+Mu30+Mu35+Mu40+Mu45, Cr = Cr15+Cr20+Cr25+Cr30+Cr35+Cr40+Cr45, ZeroNasc = (Cr == 0)) head(tmp) # quais municip. não tiveram nemhum nascimento registrado? filter(tmp, ZeroNasc == TRUE) ########### # arrange # ########### tmp = filter(D, meso == 'Norte Fluminense') tmp = mutate(tmp, Mu = Mu15+Mu20+Mu25+Mu30+Mu35+Mu40+Mu45, Cr = Cr15+Cr20+Cr25+Cr30+Cr35+Cr40+Cr45, ZeroNasc = (Cr == 0)) tmp = arrange(tmp, Cr) tmp select(tmp, id, munic, meso, Mu, Cr) ######################## # summarize + group_by # ######################## # quantos mulheres na amostra de cada regiao tmp = mutate(D, Mu = Mu15+Mu20+Mu25+Mu30+Mu35+Mu40+Mu45) tmp = group_by(tmp, reg) R = summarize(tmp, totalMulheres = sum(Mu)) arrange(R, totalMulheres) arrange(R, -totalMulheres) ############## # pipe (%>%) # ############## ## arranje os municípios da meso Norte Fluminense em ordem descendente de número de ## filhos recem-nasc., mostrando so o nome do munic, o nome da meso-reg, e o num. de Cr D %>% filter(meso == 'Norte Fluminense') %>% mutate(Cr = Cr15+Cr20+Cr25+Cr30+Cr35+Cr40+Cr45) %>% arrange( -Cr) %>% select(munic, meso, Cr) ## quais so os 15 municip. no RN com as menores amostras de mulheres 20-24 ? ## mostrando so a id, o nome do munic, e o num. de mulheres 20-24 D %>% filter(sigla == 'RN') %>% mutate( posicao = rank(Mu20)) %>% filter( posicao <= 15) %>% arrange(posicao) %>% select(id, munic, Mu20) ## qual e a media das estimativas f20 = Cr20/Mu20 em cada estado? D %>% group_by(sigla) %>% summarize( f20 = round( mean( Cr20/Mu20),3) ) %>% arrange( -f20) %>% print(n=27) ## quantos mesoregioes, microregioes, e municipios tem cada regiao ## precisa-se colar a sigla da UF aos nomes para evitar nomes duplicados (e.g. Cruzeiro do Sul) D %>% group_by(reg) %>% mutate( mesoUF = paste(meso,sigla), microUF = paste(micro,sigla), municUF = paste(munic,sigla)) %>% summarize( nmeso = length(unique(mesoUF)), nmicro = length(unique(microUF)), nmunic = length(unique(municUF))) ## TFT por regiao D %>% group_by(reg) %>% summarize( f15=sum(Cr15)/sum(Mu15), f20=sum(Cr20)/sum(Mu20), f25=sum(Cr25)/sum(Mu25), f30=sum(Cr30)/sum(Mu30), f35=sum(Cr35)/sum(Mu35), f40=sum(Cr40)/sum(Mu40), f45=sum(Cr45)/sum(Mu45), TFT = 5*(f15+f20+f25+f30+f35+f40+f45) ) %>% arrange( -TFT) %>% select( reg, TFT) ## TFT por estado (exatamente igual, ## mas com 'sigla' no lugar de 'reg' na 2a e na penúltima linha) D %>% group_by(sigla) %>% summarize( f15=sum(Cr15)/sum(Mu15), f20=sum(Cr20)/sum(Mu20), f25=sum(Cr25)/sum(Mu25), f30=sum(Cr30)/sum(Mu30), f35=sum(Cr35)/sum(Mu35), f40=sum(Cr40)/sum(Mu40), f45=sum(Cr45)/sum(Mu45), TFT = 5*(f15+f20+f25+f30+f35+f40+f45) ) %>% arrange( -TFT) %>% select( sigla, TFT) %>% print(n=27)