Transformando Datas com Lubridate com problema de Origin - Faxina de Dados Exercício 1

Olá.

Estava fazendo o exercício 01 do curso de Faxina de Dados. Estava transformando datas, mas ao aplicar lubridate deu o seguinte problema.

o xls está disponível aqui: https://curso-r.github.io/202105-faxina/dados/DadosBO_2021_3(ROUBO%20DE%20CELULAR).xls

library(magrittr)
library(tidyverse)
library(lubridate)

# Exercício 1 -------------------------------------------------------------

    base_bruta <- read.delim(
      "aula_1/dados/DadosBO_2021_3(ROUBO DE CELULAR).xls",
      fileEncoding = "UTF-16LE",
      sep = "\t",
      header = TRUE,
      stringsAsFactors = FALSE)

     base_tidy<- base_bruta %>%
              janitor::clean_names() %>%
              #transformando datas em caracteres em objeto de datas 
              dplyr::mutate(ano_bo= lubridate::year(base_tidy$ano_bo))

retornou esse erro.

Erro: Problem with `mutate()` input `ano_bo`.
x 'origin' must be supplied
i Input `ano_bo` is `lubridate::year(base_tidy$ano_bo)`

Não entendi muito bem. Procurei também na documentação, mas não consgui entender. Sempre uso lubridate sem ter que especificar essa “origem”.

Como resolver esse problema?

Oi Marcello!
Essa coluna que você está tentando transformar tem apenas o ano.

A função lubridate::year() usamos quando queremos extrair o ano de uma coluna de data. Porém essa coluna não é do tipo data, e sim do tipo inteiro (integer).

Mostrei abaixo como podemos transformar essa coluna para o tipo data. Como só temos o ano (e não temos o mês e o dia), o resultado é que temos o dia primeiro de janeiro de cada ano (repare no glimpse abaixo)…
Depois mostrei um exemplo de um uso onde a função year funciona: extraímos o ano de uma variável de data.

base_tidy <- base_bruta %>%
  janitor::clean_names() %>%
  #transformando datas em caracteres em objeto de datas
  dplyr::mutate(
    ano_bo_date = readr::parse_date(as.character(ano_bo), format = "%Y"),
    ano_bo_numero = lubridate::year(ano_bo_date)
  ) %>%
  dplyr::select(ano_bo, ano_bo_date, ano_bo_numero) %>%
  dplyr::glimpse()
Rows: 15,058
Columns: 3
$ ano_bo        <int> 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021…
$ ano_bo_date   <date> 2021-01-01, 2021-01-01, 2021-01-01, 2021-01-01, 202…
$ ano_bo_numero <dbl> 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021…

Nesse caso, acho que é importante pensar se faz realmente sentido transformar o ano em uma data, pois já temos outra coluna que é referente à data do B.O… Na minha opinião, me parece que a variável ano_bo já está em um formato adequado ao importar a base. Para mim, faz sentido parsear para date colunas que realmente tem informações de datas completas, como DATAOCORRENCIA por exemplo.

1 Curtida