4.6 Pacotes dplyr e tidyr
Vamos trabalhar com d_cjsg!
4.6.1 Características do dplyr
- O input é sempre uma
tibble, e o output é sempre umtibble. - No primeiro argumento colocamos o
tibble, e nos outros argumentos colocamo o que queremos fazer. - A utilização é facilitada com o emprego do operador
%>%
4.6.2 As cinco funções principais
filtermutateselectarrangesummarise
4.6.3 select
- Utilizar
starts_with(x),contains(x),matches(x),one_of(x), etc. - Possível colocar nomes, índices, e intervalos de variáveis com
:.
d_cjsg %>%
select(id_lawsuit, id_decision, district, rapporteur)d_cjsg %>%
select(id_decision:district, class_subject)d_cjsg %>%
select(id_lawsuit, starts_with('dt_'))Exercícios:
- selecione as colunas que acabam com “ion” ou que contêm “sum”.
- tire as colunas de texto.
4.6.4 filter
- Use
|para “ou”. - Condições separadas por vírgulas é o mesmo que separar por
&.
d_cjsg %>%
select(id_lawsuit, id_decision, district, rapporteur) %>%
filter(district == 'São Paulo')Dica: usar %in%
d_cjsg %>%
select(id_lawsuit, id_decision, district, dt_decision, rapporteur) %>%
filter(district %in% c('Campinas', 'Sorocaba') &
(day(dmy(dt_decision)) >= 29 | day(dmy(dt_decision)) < 25))d_cjsg %>%
select(rapporteur) %>%
filter(str_detect(rapporteur, '[zZ]')) %>%
count(rapporteur, sort = TRUE)Exercícios:
- filtre todas as decisões de 2018.
- filtre apenas casos em que
id_decisionnão éNA - A aplicação de
filtermodifica o objetod_cjsg?
4.6.5 mutate
- Aceita várias novas colunas iterativamente.
- Novas variáveis devem ter o mesmo
lengthque onrowdo bd original ou1.
d_cjsg %>%
select(id_lawsuit, dt_decision) %>%
mutate(ano_julgamento = year(dmy(dt_decision)),
ano_proc = str_sub(id_lawsuit, 12, 15),
ano_proc = as.numeric(ano_proc),
tempo_anos = ano_julgamento - ano_proc)Exercícios
- Crie uma coluna
comarca_limpacom a comarca sem acentos e maiúscula - Crie uma coluna binária
drogasque valeTRUEse no texto da decisão algo é falado de drogas eFALSEcaso contrário. Considere tanto a palavradrogacomo seus sinônimos, algum exemplo de droga e a Lei de Drogas.
4.6.6 arrange
- Simplesmente ordena de acordo com as opções.
- Utilizar
descpara ordem decrescente.
d_cjsg %>%
select(id_lawsuit, dt_decision) %>%
mutate(ano_julgamento = year(dmy(dt_decision)),
ano_proc = str_sub(id_lawsuit, 12, 15),
ano_proc = as.numeric(ano_proc)) %>%
mutate(tempo_anos = ano_julgamento - ano_proc) %>%
arrange(desc(tempo_anos))4.6.7 summarise
- Retorna um vetor de tamanho
1a partir de uma conta com as variáveis. - Geralmente é utilizado em conjunto com
group_by. - Algumas funções importantes:
n(),n_distinct().
d_cjsg %>%
select(id_lawsuit, district, dt_decision, court) %>%
mutate(ano_julgamento = year(dmy(dt_decision)),
ano_proc = str_sub(id_lawsuit, 12, 15),
ano_proc = as.numeric(ano_proc)) %>%
mutate(tempo_anos = ano_julgamento - ano_proc) %>%
arrange(desc(tempo_anos)) %>%
group_by(district, court) %>%
summarise(n = n(),
media_anos = mean(tempo_anos),
min_anos = min(tempo_anos),
max_anos = max(tempo_anos)) %>%
filter(n > 5) %>%
arrange(desc(media_anos))#> # A tibble: 406 x 6
#> # Groups: district [60]
#> district court n media_anos min_anos max_anos
#> <chr> <chr> <int> <dbl> <dbl> <dbl>
#> 1 Osasco 16ª Câmara de… 6 5.67 0 20.0
#> 2 Tatuí 15ª Câmara de… 8 4.62 0 12.0
#> 3 São Bernardo do Campo 3ª Câmara de … 8 4.38 0 28.0
#> 4 Botucatu 16ª Câmara de… 10 4.10 0 15.0
#> 5 Mogi das Cruzes 9ª Câmara de … 7 3.71 0 7.00
#> 6 Tatuí 2ª Câmara de … 6 3.67 0 10.0
#> 7 Avaré 13ª Câmara de… 8 3.62 0 11.0
#> 8 Guarujá 5ª Câmara de … 6 3.50 0 10.0
#> 9 Praia Grande 2ª Câmara de … 6 3.33 1.00 7.00
#> 10 Mogi das Cruzes 4ª Câmara de … 6 3.00 0 7.00
#> # ... with 396 more rows
A função count() simplifica um group_by %>% summarise %>% ungroup e é bem útil:
d_cjsg %>%
count(rapporteur, sort = TRUE) %>%
mutate(prop = n / sum(n), prop = scales::percent(prop))Exercício
- Quem é o relator mais prolixo?
4.6.8 gather
- “Empilha” o banco de dados
d_cjsg %>%
filter(!is.na(id_decision)) %>%
select(id_decision:dt_registration) %>%
gather(key, value, -id_decision) %>%
arrange(id_decision)4.6.9 spread
- “Joga” uma variável nas colunas
- É essencialmente a função inversa de
gather
d_cjsg %>%
filter(!is.na(id_decision)) %>%
select(id_decision:dt_registration) %>%
gather(key, value, -id_decision) %>%
spread(key, value)4.6.10 Funções auxiliares
unitejunta duas ou mais colunas usando algum separador (_, por exemplo).separatefaz o inverso deunite, e uma coluna em várias usando um separador.
d_cjsg %>%
select(id_lawsuit, class_subject) %>%
separate(class_subject, c('classe', 'assunto'), sep = ' / ',
extra = 'merge', fill = 'right') %>%
count(assunto, sort = TRUE)4.6.11 nest e unnest
nest e unnest são operações inversas e servem para tratar dados complecos, como o que temos em d_cposg
d_cposg <- read_rds(glue("{path}/d_cposg.rds"))
d_partes <- d_cposg %>%
select(id_lawsuit, parts) %>%
unnest(parts)
d_data <- d_cposg %>%
select(id_lawsuit, data) %>%
unnest(data)4.6.12 Um pouco mais de transformação de dados
- Para juntar tabelas, usar
inner_join,left_join,anti_join, etc. - Para realizar operações mais gerais, usar
do. - Para retirar duplicatas, utilizar
distinct. - Para fazer algumas mágicas, trabalhar com