9. Organizando os eventos de vigilância no tempo

Muitas vezes para a interpretação dos dados e construção de hipóteses em uma investigação epidemiológica, o profissional de vigilância necessita considerar uma série de acontecimentos baseados nas informações obtidas anteriormente.

Esta etapa do curso apresentará metodologias sistematizadas utilizando a linguagem R que permitirão com rapidez antever futuros cenários da distribuição de doenças. Por exemplo, avaliando se a epidemia está em ascensão ou declínio, se tem períodos (dias, semanas, meses ou anos) de remissão ou até mesmo recrudescimento de casos. Ou seja, você será capaz de conhecer a distribuição de uma doença, permitindo tomar decisões oportunas e em tempo hábil.

Aqui você aprenderá a organizar seus dados por dia, mês, ano e semana epidemiológica com facilidade e rapidez dentro do R utilizando o pacote lubridate.

Agora faremos uma série de exercícios em que aprenderemos métodos que facilitem conhecer e organizar a distribuição de um evento segundo suas características no tempo.


9.1 Transformando datas

O primeiro passo para se trabalhar com datas é entender o formato em que o R costuma interpretar datas. Como definição padrão, as datas no R são representadas no seguinte formato:

YYYY-MM-DD

Sendo YYYY o ano (year, em inglês) com quatro dígitos, MM os meses (month, em inglês), e DD os dias (day, em inglês). Cada uma dessas informações é separada por um hífen (-).

É possível criar um objeto de data de R a partir de um string de texto. Acompanhe o script abaixo e replique-o em seu RStudio:

# Transformando uma string em data
data_1 <- as_date("2022-05-19")

# Visualizando a string transformada em data
data_1
#> [1] "2022-05-19"

Como resultado, você verá a data digitada entre aspas.

Agora vamos utilizar a função class() para verificar o formato (o tipo de dado) da tabela data_1. Acompanhe o script abaixo e replique-o em seu RStudio:

# Verificando a classe do objeto `data_1`
class(data_1)
#> [1] "Date"

Perceba que ela está no formato Date. Entretanto, quando trabalhamos com diferentes bancos de dados, as datas podem se apresentar nos mais diferentes formatos. No Brasil é comum utilizarmos datas no formato DD/MM/AAAA (por exemplo: “19/05/2022”). Os dados exportados do Sistema de Informação sobre Mortalidade, por exemplo, têm as datas apresentadas sem separação, no formato DDMMAAAA (19052022), o que dificulta o manuseio destas datas no dia a dia de forma rápida.

Para que o R interprete estas datas corretamente, precisaremos definir o formato de data que deverá ser considerado. Isto é definido pelo uso de símbolos, conforme demonstrado na tabela a seguir:


Figura 1: Ciclo de manipulação dos dados de vigilância em saúde.


Agora vamos estudar alguns exemplos. Observe que ao utilizarmos a data no formato DD/MM/AAAA, com a função as_date(), visualizaremos uma mensagem de aviso (warning) e o objeto resultante será o valor NA.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Transformando uma string em data sem definir o formato
as_date("19/05/2022")
#> Warning: All formats failed to parse. No formats found.
#> [1] NA

Para que o código interprete corretamente a data a ser transformada, devemos utilizar o argumento format, e entre aspas colocar o código correspondentes ao formato de data que queremos que a função interprete. Desta forma, para que a função compreenda que o formato de data que queremos é “DD/MM/AAAA”, devemos utilizar o código %d/%m/%Y desta forma.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Transformando uma string em data definindo o formato
as_date("19/05/2022", format = "%d/%m/%Y")
#> [1] "2022-05-19"

Note que o R irá retornar a data no formato que utiliza como padrão: AAAA-MM-DD, ou como podemos compreender agora, %Y-%m-%d. Para resolver o problema de datas como utilizado no banco de dados SIM, DDMMAAAA, acompanhe o script abaixo e replique-o em seu RStudio:

# Transformando uma string do tipo das datas do SIM definindo o formato
as_date("01031998", format = "%d%m%Y")
#> [1] "1998-03-01"

Estas transformações são muito importantes quando trabalhamos no R. Datas salvas como strings limitarão alguns cálculos (como cálculo entre datas, ou séries temporais). Assim ao final de qualquer manipulação de dados é preciso verificar se as colunas que armazenam datas são do tipo “data” (Date). Caso não sejam, você deve transformá-las para este formato.


9.2 Cálculo com datas

Agora que aprendemos a extrair datas e transformá-las em formatos desejados, podemos com segurança, realizar diferentes operações com as datas.

Para os próximos exemplos iremos retornar o uso do banco de dados {NINDINET.dbf}. Em especial, utilizaremos os 10 primeiros registros das colunas DT_NOTIFIC, DT_SIN_PRI, e DT_NASC, contendo a data de notificação de agravo, a data de primeiros sintomas, e a data de nascimento, respectivamente. Siga a o passo a passo abaixo:

  1. importe o banco de dados {NINDINET.dbf},

  2. selecione apenas as colunas (DT_NOTIFIC, DT_SIN_PRI, e DT_NASC) de interesse com a função select(), e

  3. escolha os 10 primeiros registros com a função slice().

Acompanhe o script abaixo e replique-o em seu RStudio

# Importando o banco de dados { `NINDINET.dbf` } para o `R`
dt_notific <- read.dbf(file = 'Dados/NINDINET.dbf') |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC, DT_SIN_PRI, DT_NASC) |>
  
  # Selecionar apenas as linhas de interesse (linhas 1 a 10)
  slice(1:10)

Caso deseje, visualize os valores selecionados apenas digitando o nome do objeto criado. Acompanhe o script abaixo e replique-o em seu RStudio:

# Visualizando o objeto {`dt_notific`}
dt_notific
#>    DT_NOTIFIC DT_SIN_PRI    DT_NASC
#> 1  2012-04-11 2012-04-05 2012-04-04
#> 2  2010-09-17 2010-09-09 1988-04-23
#> 3  2010-10-19 2010-10-19 1971-03-25
#> 4  2008-04-14 2008-04-11 1928-05-29
#> 5  2011-06-20 2011-04-02 2002-09-18
#> 6  2008-02-12 2008-02-06 1953-08-01
#> 7  2007-12-14 2007-12-03 1975-10-20
#> 8  2011-07-06 2011-07-06 1996-08-14
#> 9  2008-04-24 2008-04-23 2000-10-28
#> 10 2011-07-06 2011-07-06 2000-03-03

A operação mais simples que veremos aqui é a de soma envolvendo datas. Somando um valor inteiro a uma data, iremos calcular a data correspondente após a soma deste número de dias. Esse exercício é importante para avaliar, por exemplo, a data de encerramento da maioria dos agravos de notificação compulsória a partir da data de notificação. Acompanhe o script abaixo que adicionamos 60 dias à data de notificação. Replique-o em seu RStudio:

# Somando 60 dias às datas de notificação de casos da tabela {`dt_notific`}
dt_notific$DT_NOTIFIC + 60
#>  [1] "2012-06-10" "2010-11-16" "2010-12-18" "2008-06-13" "2011-08-19"
#>  [6] "2008-04-12" "2008-02-12" "2011-09-04" "2008-06-23" "2011-09-04"

Da mesma forma, é possível subtrair 60 dias as datas de notificação da tabela. Perceba que a mesma lógica se aplica quando fazemos a subtração de datas. Acompanhe abaixo o script e replique-o em seu RStudio:

# Subtraindo 60 dias as datas de notificação 
#de casos à tabela {`dt_notific`}
dt_notific$DT_NOTIFIC - 60
#>  [1] "2012-02-11" "2010-07-19" "2010-08-20" "2008-02-14" "2011-04-21"
#>  [6] "2007-12-14" "2007-10-15" "2011-05-07" "2008-02-24" "2011-05-07"

Agora faremos a comparação entre as datas calculadas acima utilizando a função mutate() após selecionar apenas a data de notificação dos casos (coluna DT_NOTIFIC).

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dt_notific_2`}
dt_notific_2 <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC) |>
  
  # Utilizando a função `mutate()` para criar a nova coluna "prazo_encerramento"
  mutate(prazo_encerramento = DT_NOTIFIC + 60)

# Visualizando a tabela {`dt_notific_2`} criada
dt_notific_2
#>    DT_NOTIFIC prazo_encerramento
#> 1  2012-04-11         2012-06-10
#> 2  2010-09-17         2010-11-16
#> 3  2010-10-19         2010-12-18
#> 4  2008-04-14         2008-06-13
#> 5  2011-06-20         2011-08-19
#> 6  2008-02-12         2008-04-12
#> 7  2007-12-14         2008-02-12
#> 8  2011-07-06         2011-09-04
#> 9  2008-04-24         2008-06-23
#> 10 2011-07-06         2011-09-04

Como resultado você obtém uma nova tabela {dt_notific_2} contendo três colunas: a primeira é uma coluna índice que marca o número da linha não sendo uma variável do banco em si, a data de notificação (DT_NOTIFIC) e a nova coluna que se refere a data 60 dias após a data da notificação (prazo_encerramento).

A vigilância em saúde busca iniciar o controle e as atividades de prevenção o mais cedo possível. Uma informação importante para análise da sensibilidade do sistema de vigilância é o monitoramento do tempo transcorrido entre o início de sintomas e a data de notificação dos casos.

Com o R, podemos calcular a diferença em dias entre duas datas de forma simples e rápida. Vamos praticar!

Primeiro, criaremos o objeto {dif_tempo}, ele armazenará uma tabela contendo a variável DIFERENCA, que por sua vez guardará os valores resultantes do cálculo de diferença entre duas datas.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dif_tempo`}
dif_tempo <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC, DT_SIN_PRI) |>
  
  # Utilizando a função `mutate()` para criar a nova coluna "DIFERENCA"
  mutate(DIFERENCA = DT_NOTIFIC - DT_SIN_PRI)

# Visualizando a tabela {`dif_tempo`} criada
dif_tempo
#>    DT_NOTIFIC DT_SIN_PRI DIFERENCA
#> 1  2012-04-11 2012-04-05    6 days
#> 2  2010-09-17 2010-09-09    8 days
#> 3  2010-10-19 2010-10-19    0 days
#> 4  2008-04-14 2008-04-11    3 days
#> 5  2011-06-20 2011-04-02   79 days
#> 6  2008-02-12 2008-02-06    6 days
#> 7  2007-12-14 2007-12-03   11 days
#> 8  2011-07-06 2011-07-06    0 days
#> 9  2008-04-24 2008-04-23    1 days
#> 10 2011-07-06 2011-07-06    0 days

Perceba que o resultado é indicado na variável DIFERENCA em número de dias. Para manter apenas os valores numéricos dessa diferença podemos transformar a coluna em números inteiros utilizando a função as.integer().

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dif_tempo_2`}
dif_tempo_2 <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC, DT_SIN_PRI) |>
  
  # Utilizando a função `mutate()` para criar a nova coluna "Diferenca"
  mutate(Diferenca = as.integer(DT_NOTIFIC - DT_SIN_PRI))

# Visualizando a tabela {`dif_tempo_2`} criada
dif_tempo_2
#>    DT_NOTIFIC DT_SIN_PRI Diferenca
#> 1  2012-04-11 2012-04-05         6
#> 2  2010-09-17 2010-09-09         8
#> 3  2010-10-19 2010-10-19         0
#> 4  2008-04-14 2008-04-11         3
#> 5  2011-06-20 2011-04-02        79
#> 6  2008-02-12 2008-02-06         6
#> 7  2007-12-14 2007-12-03        11
#> 8  2011-07-06 2011-07-06         0
#> 9  2008-04-24 2008-04-23         1
#> 10 2011-07-06 2011-07-06         0

A transformação do tempo para números inteiros é importante, pois sempre necessitamos fazer outras operações com esses valores, por exemplo, quando vamos calcular a idade de cada caso notificado no momento da data de início de sintomas.

Vamos praticar mais. Observe que primeiro calcularemos a diferença em dias entre a data de nascimento e a data de primeiros sintomas para saber a idade (dias) que nossos pacientes tinham quando estavam doentes.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`idade`}
idade <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NASC, DT_SIN_PRI) |>
  
  # Utilizando a função `mutate()` para criar a nova coluna "IDADE_DIAS"
  mutate(IDADE_DIAS = as.integer(DT_SIN_PRI - DT_NASC))

# Visualizando a tabela {`idade`} criada
idade
#>       DT_NASC DT_SIN_PRI IDADE_DIAS
#> 1  2012-04-04 2012-04-05          1
#> 2  1988-04-23 2010-09-09       8174
#> 3  1971-03-25 2010-10-19      14453
#> 4  1928-05-29 2008-04-11      29172
#> 5  2002-09-18 2011-04-02       3118
#> 6  1953-08-01 2008-02-06      19912
#> 7  1975-10-20 2007-12-03      11732
#> 8  1996-08-14 2011-07-06       5439
#> 9  2000-10-28 2008-04-23       2734
#> 10 2000-03-03 2011-07-06       4142

Perceba que utilizar idade em dias pode não ser útil para suas avaliações na vigilância, portanto precisaremos dividir estas idades pelo valor por 365,25 (considera-se este valor por levar em conta os anos bissextos), e arredondaremos para o menor valor inteiro, utilizando a função floor().

Acompanhe o script abaixo e replique-o em seu RStudio:

# Alterando a tabela {`idade`}
idade <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NASC, DT_SIN_PRI) |>
  
  # Utilizando a função `mutate()` para criar as novas colunas de idade
  mutate(
    IDADE_DIAS = as.integer(DT_SIN_PRI - DT_NASC),
    IDADE_ANOS = floor(IDADE_DIAS / 365.25)
  )


# Visualizando a tabela {`idade`} modificada
idade
#>       DT_NASC DT_SIN_PRI IDADE_DIAS IDADE_ANOS
#> 1  2012-04-04 2012-04-05          1          0
#> 2  1988-04-23 2010-09-09       8174         22
#> 3  1971-03-25 2010-10-19      14453         39
#> 4  1928-05-29 2008-04-11      29172         79
#> 5  2002-09-18 2011-04-02       3118          8
#> 6  1953-08-01 2008-02-06      19912         54
#> 7  1975-10-20 2007-12-03      11732         32
#> 8  1996-08-14 2011-07-06       5439         14
#> 9  2000-10-28 2008-04-23       2734          7
#> 10 2000-03-03 2011-07-06       4142         11


Pronto, agora será possível conhecer a idade em anos dos pacientes notificados a partir da data de início dos sintomas.


9.3 Extrair dia, mês e ano, dia da semana

Agora que aprendemos a identificar e realizar cálculos com datas, podemos extrair informações específicas delas. Esta etapa é importante, por exemplo, quando precisamos saber qual o dia da semana ou do mês possuem o maior e ou o menor número de notificações.

Para esta etapa o pacote lubridate apresenta funções que permitem facilmente a extração de informações como o ano, mês, dia, e dia da semana a partir de um conjunto de datas. Veja algumas formas de fazer estas extrações:

Acompanhe os scripts abaixo e replique-os em seu RStudio:

  • Extrair ano:
year(dt_notific$DT_NOTIFIC)
#>  [1] 2012 2010 2010 2008 2011 2008 2007 2011 2008 2011
  • Extrair o mês:
month(dt_notific$DT_NOTIFIC)
#>  [1]  4  9 10  4  6  2 12  7  4  7
  • Extrair o dia:
day(dt_notific$DT_NOTIFIC)
#>  [1] 11 17 19 14 20 12 14  6 24  6
  • Extrair o dia da semana:

Para indicar o dia da semana utilizamos a função wday(). Esta função possui mais dois argumentos de interesse:

  • label: pode ser verdadeiro (TRUE) ou falso (FALSE): indica se o valor retornado será o nome do dia da semana ou o número correspondente a este dia.
  • abbr: pode ser verdadeiro (TRUE) ou falso (FALSE): indica se o nome do dia da semana será abreviado ou não.

Observe abaixo como realizamos os comandos abaixo e replique-os em seu RStudio:

  • retornar apenas o número correspondente ao dia da semana
wday(dt_notific$DT_NOTIFIC)
#>  [1] 4 6 3 2 2 3 6 4 5 4
  • retornar o nome do dia da semana, abreviado:
wday(dt_notific$DT_NOTIFIC, label = TRUE)
#>  [1] qua sex ter seg seg ter sex qua qui qua
#> Levels: dom < seg < ter < qua < qui < sex < sáb
  • retornar o nome do dia da semana, sem abreviação
wday(dt_notific$DT_NOTIFIC, label = TRUE, abbr = FALSE)
#>  [1] quarta-feira  sexta-feira   terça-feira   segunda-feira segunda-feira
#>  [6] terça-feira   sexta-feira   quarta-feira  quinta-feira  quarta-feira 
#> 7 Levels: domingo < segunda-feira < terça-feira < ... < sábado


9.4 Identificar semana epidemiológica das datas

Para a vigilância epidemiológica, uma das informações mais relevantes a respeito de uma data é a qual semana epidemiológica (SE) determinado evento pertence. A semana epidemiológica é um consenso sobre o uso de um período padrão para agrupar os casos e óbitos ou outros eventos epidemiológicos, internacionalmente.

Com o R você poderá organizar os fatos por SE com rapidez utilizando o pacote lubridate. Com ele você poderá identificar a semana epidemiológica a partir da função epiweek(). Note que esta função considera por padrão que o início da SE é o domingo.

Agora vamos organizar as datas de notificação da tabela {dt_notific} criada anteriormente com os dados do {NINDINET.dbf} em semanas epidemiológicas.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Transformando todas as datas da variável `DT_NOTIFIC`
# da tabela {`dt_notific`} em semana epidemiológica 
# com a função `epiweek()`
epiweek(dt_notific$DT_NOTIFIC)
#>  [1] 15 37 42 16 25  7 50 27 17 27

Observe que para cada data você obterá um valor numérico indicando a semana epidemiológica correspondente.

Para sintetizar, vamos criar uma tabela dt_notific_2 contendo ano, mês, dia, número da semana, nome da semana, nome completo da semana e semana epidemiológica utilizando as notificações de casos do banco de dados {NINDNET.dbf}.

Para isso utilizaremos a função mutate(), que também já foi abordada neste módulo. Acompanhe o script abaixo e replique-o em seu RStudio:

# Alterando a tabela {`dt_notific_2`}
dt_notific_2 <- dt_notific |>
  
    # Utilizando a função `mutate()` para criar novas colunas
  mutate(
    
    # Criando variável ano a partir da data de notificação
    # utilizando a função `year()`
    ano = year(DT_NOTIFIC),  
    
    # Criando variável mes a partir da data de notificação
    # utilizando a função `month()`
    mes = month(DT_NOTIFIC), 
    
    # Criando variável dia a partir da data de notificação
    # utilizando a função `day()`
    dia = day(DT_NOTIFIC),
    
    # Criando variável semana_num a partir da data de notificação
    # utilizando a função `wday()`
    semana_num = wday(DT_NOTIFIC), 
    
    # Criando variável semana_nome a partir da data de notificação
    # utilizando a função `wday()`
    semana_nome = wday(DT_NOTIFIC, label = TRUE),
    
    # Criando variável semana_nome_completo a partir da data de notificação
    # utilizando a função `wday()`
    semana_nome_completo = wday(DT_NOTIFIC, label = TRUE, abbr = FALSE),
    
    # Criando variável semana_epidemiológica a partir da data de notificação
    # utilizando a função `epiweek()`
    semana_epidemiologica = epiweek(DT_NOTIFIC)
  )

# Visualizando a tabela {`dt_notific_2`} alterada
dt_notific_2
#>    DT_NOTIFIC DT_SIN_PRI    DT_NASC  ano mes dia semana_num semana_nome
#> 1  2012-04-11 2012-04-05 2012-04-04 2012   4  11          4         qua
#> 2  2010-09-17 2010-09-09 1988-04-23 2010   9  17          6         sex
#> 3  2010-10-19 2010-10-19 1971-03-25 2010  10  19          3         ter
#> 4  2008-04-14 2008-04-11 1928-05-29 2008   4  14          2         seg
#> 5  2011-06-20 2011-04-02 2002-09-18 2011   6  20          2         seg
#> 6  2008-02-12 2008-02-06 1953-08-01 2008   2  12          3         ter
#> 7  2007-12-14 2007-12-03 1975-10-20 2007  12  14          6         sex
#> 8  2011-07-06 2011-07-06 1996-08-14 2011   7   6          4         qua
#> 9  2008-04-24 2008-04-23 2000-10-28 2008   4  24          5         qui
#> 10 2011-07-06 2011-07-06 2000-03-03 2011   7   6          4         qua
#>    semana_nome_completo semana_epidemiologica
#> 1          quarta-feira                    15
#> 2           sexta-feira                    37
#> 3           terça-feira                    42
#> 4         segunda-feira                    16
#> 5         segunda-feira                    25
#> 6           terça-feira                     7
#> 7           sexta-feira                    50
#> 8          quarta-feira                    27
#> 9          quinta-feira                    17
#> 10         quarta-feira                    27

Dependendo do tipo de análise a ser realizada ou da necessidade de visualização, pode ser importante agregar dados em semanas epidemiológicas, e então indicar a data de final desta semana epidemiológica. Podemos fazer isso com um pequeno truque.

Primeiro, calculamos o número correspondendo ao dia da semana, sendo 1 referente ao domingo (primeiro dia da semana), e 7 referente ao sábado (o último dia).

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dt_notific_3`}
dt_notific3 <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC) |>
  
  # Utilizando a função `mutate()` para criar a variável "dia_semana"
  mutate(dia_semana = wday(DT_NOTIFIC))

# Visualizando o objeto criado
dt_notific3
#>    DT_NOTIFIC dia_semana
#> 1  2012-04-11          4
#> 2  2010-09-17          6
#> 3  2010-10-19          3
#> 4  2008-04-14          2
#> 5  2011-06-20          2
#> 6  2008-02-12          3
#> 7  2007-12-14          6
#> 8  2011-07-06          4
#> 9  2008-04-24          5
#> 10 2011-07-06          4

Em seguida, calculamos a diferença deste dia em relação ao último (sábado), subtraindo de 7 os valores encontrados. Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dt_notific_4`}
dt_notific_4 <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC) |>
  
  # Utilizando a função `mutate()` para criar as novas variáveis
  mutate(dia_semana = wday(DT_NOTIFIC),
         dif_dia_semana = 7 - dia_semana)

# Visualizando a tabela {`dt_notific_4`} criada
dt_notific_4
#>    DT_NOTIFIC dia_semana dif_dia_semana
#> 1  2012-04-11          4              3
#> 2  2010-09-17          6              1
#> 3  2010-10-19          3              4
#> 4  2008-04-14          2              5
#> 5  2011-06-20          2              5
#> 6  2008-02-12          3              4
#> 7  2007-12-14          6              1
#> 8  2011-07-06          4              3
#> 9  2008-04-24          5              2
#> 10 2011-07-06          4              3

Por último, somaremos esta diferença ( dif_dia_semana) à data do evento ( DT_NOTIFIC). Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dt_notific_5`}
dt_notific_5 <- dt_notific |>
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC) |>
  
  # Utilizando a função `mutate()` para criar as novas variáveis
  mutate(
    dia_semana = wday(DT_NOTIFIC),
    dif_dia_semana = 7 - dia_semana,
    DT_semana_epi = DT_NOTIFIC + dif_dia_semana
  )

# Visualizando a tabela {`dt_notific_5`} criada
dt_notific_5
#>    DT_NOTIFIC dia_semana dif_dia_semana DT_semana_epi
#> 1  2012-04-11          4              3    2012-04-14
#> 2  2010-09-17          6              1    2010-09-18
#> 3  2010-10-19          3              4    2010-10-23
#> 4  2008-04-14          2              5    2008-04-19
#> 5  2011-06-20          2              5    2011-06-25
#> 6  2008-02-12          3              4    2008-02-16
#> 7  2007-12-14          6              1    2007-12-15
#> 8  2011-07-06          4              3    2011-07-09
#> 9  2008-04-24          5              2    2008-04-26
#> 10 2011-07-06          4              3    2011-07-09

Naturalmente, podemos realizar todos estes cálculos criando apenas uma coluna nova ao final da tabela dt_notific_6. Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando a tabela {`dt_notific_6`}
dt_notific_6 <- dt_notific |>
  
  # Selecionando as variáveis que queremos utilizar com a função `select()`
  select(DT_NOTIFIC) |>
  
  # Utilizando a função `mutate()` para criar a nova coluna
  mutate(DT_semana_epi = DT_NOTIFIC + 7 - wday(DT_NOTIFIC))

# Visualizando o objeto criado
dt_notific_6
#>    DT_NOTIFIC DT_semana_epi
#> 1  2012-04-11    2012-04-14
#> 2  2010-09-17    2010-09-18
#> 3  2010-10-19    2010-10-23
#> 4  2008-04-14    2008-04-19
#> 5  2011-06-20    2011-06-25
#> 6  2008-02-12    2008-02-16
#> 7  2007-12-14    2007-12-15
#> 8  2011-07-06    2011-07-09
#> 9  2008-04-24    2008-04-26
#> 10 2011-07-06    2011-07-09


9.5 Sequência de datas

Em certas situações, pode ser necessária a criação de uma sequência de dados em intervalos regulares. Uma situação mais simples é a situação em que queremos criar uma sequência de dias ao longo de uma semana a partir de uma data inicial.

Como havíamos visto anteriormente, o R permite que somemos uma data a um valor numérico inteiro. Desta forma, podemos criar um vetor com valores no total de 7 datas (0 a 7), e somar a uma data que tivermos interesse. Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando uma sequência de datas, criando dias de uma semana
as.Date("2022-01-01") + 0:7
#> [1] "2022-01-01" "2022-01-02" "2022-01-03" "2022-01-04" "2022-01-05"
#> [6] "2022-01-06" "2022-01-07" "2022-01-08"

Para situações mais complexas, também podemos utilizar a função seq.Date() para sequências personalidades. Considere que você necessite criar uma sequência de datas entre o primeiro dia de dois meses consecutivos: 1º de janeiro de 2022 e 1º de fevereiro de 2022. A função seq.Date() possui três argumentos:

  • from: data de início da sequência,
  • to: data final da sequência,
  • by: intervalo de tempo entre as duas datas.

Acompanhe o script abaixo e replique-o em seu RStudio:

# Criando uma sequência de datas
seq.Date(from = as.Date("2022-01-01"), to = as.Date("2022-02-01"), by = "day")
#>  [1] "2022-01-01" "2022-01-02" "2022-01-03" "2022-01-04" "2022-01-05"
#>  [6] "2022-01-06" "2022-01-07" "2022-01-08" "2022-01-09" "2022-01-10"
#> [11] "2022-01-11" "2022-01-12" "2022-01-13" "2022-01-14" "2022-01-15"
#> [16] "2022-01-16" "2022-01-17" "2022-01-18" "2022-01-19" "2022-01-20"
#> [21] "2022-01-21" "2022-01-22" "2022-01-23" "2022-01-24" "2022-01-25"
#> [26] "2022-01-26" "2022-01-27" "2022-01-28" "2022-01-29" "2022-01-30"
#> [31] "2022-01-31" "2022-02-01"

A facilidade desta função está na permissão de especificar intervalos diferentes no argumento by, contendo os argumentos:

  • day: intervalo em dias
  • week: intervalo em semanas
  • month: intervalo em mês
  • quarter: intervalo a cada três meses
  • year: intervalo em anos

Pratique as transformações de datas no seu dia a dia!