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!