Como lidar com Datas Faltantes

Olá, tenho uma dúvida sobre datas novamente kkk.

No meu TCC da curso R de faxina de dados, falta uma última coluna de datas somente para padronizar:

Estou importando dados de um pdf de óbitos por covid da prefeitura da minha cidade: https://covid19.pjf.mg.gov.br/arquivos/obitos_covid19_jf.pdf

O PDF separei em tabelas aqui:

No campo das DATAS, temos vários padrões:

Em números, temos “dd/mm/yy”, “dd/mm/yyyy”, “dd/mm”, “d/mm”, “dd/m” e “ddmm”.
Já lidei com os casos de número por extenso.
A meta é passar tudo para yyyy-mm-dd como objeto de data.

Para lidar com as linhas cujas datas que não tem meses ou anos, como a base é atualizada por dia,
a linha de cima provavelmente é o mesmo mês e ano do registro. Nesse caso, pensei fazer um tidyr::fill(direction =“down”) para lidar com as faltas.

Isso até que poderia dar certo para datas no mesmo ano, mas quando ficamos com datas perto da virada de 2020 para 2021, isso pode dar bastante erro.

A base é ordenada por cada dia, o que representa uma data de notificação.
Agora, a coluna data_obito que precisa ser padronizado é a data do obito efetivo, nao que ele foi notificado.

Isso funciona bem nesse caso, quando ainda estamos somente em 2020…

Mas quando chegamos na virada do ano, o problema aumenta:

nesse caso, é a base vem 27/12/2020, 31/12/2020, vira para 01/01/2021, e de repente tem um 28/12/2020. o direction= “down” aqui agora vai gerar uma série 01/01/2020, 07/01/2020, quando nem tinha começado a pandemia.

Como resolver essa questão? Alguma forma de resolver isso por área do data frame? na mão quando estivermos perto da virada? ou é melhor deixar um NA mesmo?

Nossa… que inferno de base :joy: ótima escolha para o TCC de faxina.

Eu acho que não tem almoço grátis nesse caso mesmo. Talvez o que você pode fazer é 1) gerar as datas com fill, 2) fazer uma função que verifica se a data é aceitável ou não e 3) arrumar manualmente as que derem errado.

Sinto muito :confused:

1 curtida

Consegui.

O PDF é atualizado todo dia e pelo menos, ele vai em “ordem” do que seria a data da notificação.

Então, dá pra saber que algumas áreas do documento vão ter necessariamente datas em algumas épocas.

Criei uma coluna de página do PDF e percebi que da 15 à 23, tenho números de Dezembro de 2020, e Janeiro à Março de 2021.

Ou seja, para baixo entre as páginas 15 e 23, o que for dezembro é 2020, e o que for janeiro, fevereiro ou março é 2021. Assim consegui lidar.

Atualizei o código no github hoje. Apesar de ter feito os comentários durante todo o código, vou tentar fazer o Rmarkdown.

obitos_diarios_pjf_tidy_datas_numero<- obitos_diarios_pjf_tidy_datas_extenso %>%
mutate( data_obito = str_split(data_obito, “/”)) %>%
unnest_wider(data_obito) %>%
rename(“dia”= “…1”, “mes”= “…2”, “ano” = “…3” ) %>%
mutate(dia = case_when(
str_length(dia) == 1 ~ paste(0, dia, sep= “”),
# dia == “00” ~ “01”,
TRUE ~ as.character(dia)),
mes = case_when(
str_length(mes) == 1 ~ paste(0, mes, sep= “”),
is.na(mes) & pag == 9 ~ “11”,
TRUE ~ as.character(mes)),
mes= str_replace(mes,“00”,“01”),
ano = case_when(
pag == 31 & dia == 23 ~ str_replace(ano, “2021”,“2020”),
ano == “2020” ~ as.character(ano),
ano == “2021” ~ as.character(ano),
pag <= 13 ~ “2020”,
pag >= 24 ~ “2021”,
pag >= 14 & pag <= 23 & str_detect(mes, “12”) ~ “2020”,
pag >= 14 & pag <= 23 & str_detect(mes, “01|02|03”) ~ “2021”
))

1 curtida