5.1 Funções do tidyr
O dplyr está para o tidyr assim como tesoura/cola está para um alicate/martelo.
Enquanto o dplyr faz recortes na base (com filter()e select()) e adições simples (mutate(), summarise()), o tidyr mexe no formato da tabela (gather(), spread()) e faz modificações menos triviais.
5.1.1 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)5.1.2 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)5.1.3 Unindo e separando colunas
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)5.1.4 List columns: 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_partes <- d_cposg %>%
select(id_lawsuit, parts) %>%
unnest(parts)
d_data <- d_cposg %>%
select(id_lawsuit, data) %>%
unnest(data)5.1.5 Joins
Para juntar tabelas, usar inner_join, left_join, anti_join, etc. O melhor material disso está em http://r4ds.had.co.nz/relational-data.html.
Exemplo de inner join:
d_cjsg %>%
filter(dmy(dt_registration) == "2018-01-18", !is.na(id_decision)) %>%
select(id_decision, id_lawsuit) %>%
inner_join(d_cposg, "id_lawsuit") %>%
glimpse()#> Observations: 170
#> Variables: 8
#> $ id_decision <chr> "11109089", "11109088", "11108246", "11108245", "1...
#> $ id_lawsuit <chr> "0003779-93.2015.8.26.0597", "3001293-25.2013.8.26...
#> $ id <chr> "00037799320158260597", "30012932520138260510", "0...
#> $ file <chr> "data-raw/camaras/cposg/00037799320158260597.html"...
#> $ hidden <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F...
#> $ data <list> [<# A tibble: 14 x 2, data value ...
#> $ parts <list> [<# A tibble: 3 x 4, id name ...
#> $ decisions <list> [<# A tibble: 1 x 2, date decision ...
Exemplo de right join:
d_cjsg %>%
filter(dmy(dt_registration) == "2018-01-18", !is.na(id_decision)) %>%
select(id_decision, id_lawsuit) %>%
right_join(d_cposg, "id_lawsuit") %>%
glimpse()#> Observations: 11,763
#> Variables: 8
#> $ id_decision <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ id_lawsuit <chr> "0000003-71.2016.8.26.0073", "0000004-09.2017.8.26...
#> $ id <chr> "00000037120168260073", "00000040920178260142", "0...
#> $ file <chr> "data-raw/camaras/cposg/00000037120168260073.html"...
#> $ hidden <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F...
#> $ data <list> [<# A tibble: 11 x 2, data value ...
#> $ parts <list> [<# A tibble: 3 x 4, id name ...
#> $ decisions <list> [<# A tibble: 1 x 2, date decision ...
5.1.6 Duplicatas
Para retirar duplicatas, utilizar distinct. Ele considera apenas a primeira linha em que encontra um padrão para as combinações de variáveis escolhidas e descarta as demais.
d_cjsg %>%
distinct(district)Para manter as demais colunas, use .keep_all =:
d_cjsg %>%
distinct(district, .keep_all = TRUE)Use janitor::get_dupes() para averiguar os casos em que há repetição de combinações de colunas.
d_cjsg %>%
janitor::get_dupes(id_lawsuit)Para mais aplicações do janitor, ver este blog post.