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:
importe o banco de dados {
NINDINET.dbf},selecione apenas as colunas (
DT_NOTIFIC,DT_SIN_PRI, eDT_NASC) de interesse com a funçãoselect(), eescolha 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 diasweek: intervalo em semanasmonth: intervalo em mêsquarter: intervalo a cada três mesesyear: intervalo em anos
Pratique as transformações de datas no seu dia a dia!