Introdução
As funções lag()
e lead()
são recursos poderosos do pacote dplyr
no R que nos permitem analisar diferenças e tendências temporais em conjuntos de dados. Com essas funções, podemos facilmente comparar valores anteriores e posteriores em uma sequência, o que é útil para identificar padrões, mudanças e comportamentos ao longo do tempo. Neste post, exploraremos a funcionalidade dessas funções usando um exemplo prático.
Antes de prosseguirmos, certifique-se de ter instalado o pacote dplyr
.
install.packages("dplyr")
Sintaxe
A sintaxe básica da função lag()
é a seguinte:
dplyr::lag(x, n = 1L, default = NULL, order_by = NULL, ...)
x
: um vetor.n
: o número de posições para trás que queremos retroceder. Por padrão, é 1, o que significa que a função retornará o valor anterior à posição atual.default
: valor padrão a ser retornado caso não haja valor anterior disponível. Por padrão, é definido comoNULL
, o que significa que, se não houver valor anterior, a função retornaráNA
.order_by
: uma coluna usada para ordenar os dados. Se não for especificado, a funçãolag()
assumirá que os dados estão na ordem em que aparecem no conjunto de dados.
Exemplo simples
Considere o seguinte conjunto de dados:
tab <- tibble::tibble(
medida = c(1, 2, 1, 3, 4, 1, 2, 0)
)
Neste exemplo, temos uma coluna chamada “medida” que contém valores numéricos. Vamos começar utilizando a função lag() para criar uma nova coluna chamada “lag_medida”, que armazenará o valor anterior de “medida” em cada linha:
tab |>
dplyr::mutate(
lag_medida = dplyr::lag(medida)
)
## # A tibble: 8 × 2
## medida lag_medida
## <dbl> <dbl>
## 1 1 NA
## 2 2 1
## 3 1 2
## 4 3 1
## 5 4 3
## 6 1 4
## 7 2 1
## 8 0 2
Observe que a primeira linha da coluna “lag_medida” é NA
porque não há um valor anterior para a primeira observação.
Agora, vamos criar uma nova coluna chamada “flag_aumentou”, que indicará se o valor atual de “medida” é maior que o valor anterior:
tab |>
dplyr::mutate(
lag_medida = dplyr::lag(medida),
flag_aumentou = medida > lag_medida
)
## # A tibble: 8 × 3
## medida lag_medida flag_aumentou
## <dbl> <dbl> <lgl>
## 1 1 NA NA
## 2 2 1 TRUE
## 3 1 2 FALSE
## 4 3 1 TRUE
## 5 4 3 TRUE
## 6 1 4 FALSE
## 7 2 1 TRUE
## 8 0 2 FALSE
A coluna flag_aumentou nos informa se a medida atual é maior que a medida anterior (TRUE
) ou não (FALSE
). Esse tipo de informação pode ser útil para identificar momentos de crescimento ou decrescimento em séries temporais.
Exemplo com dados agrupados
Vamos agora explorar como utilizá-la em dados agrupados por indivíduo. Essa situação é comum quando temos uma série temporal para cada indivíduo em nosso conjunto de dados e desejamos analisar as variações dentro de cada grupo ao longo do tempo. Considere a tabela:
tab <- tibble::tibble(
individuo = rep(1:2, each = 4), # Dois indivíduos com 4 medidas cada
medida = c(1, 2 , 1, 3, 4, 1, 2, 0)
)
tab
## # A tibble: 8 × 2
## individuo medida
## <int> <dbl>
## 1 1 1
## 2 1 2
## 3 1 1
## 4 1 3
## 5 2 4
## 6 2 1
## 7 2 2
## 8 2 0
A seguir, utilizamos a função lag()
para criar uma nova coluna com a medida anterior, agrupado por indivíduo.
tab |>
dplyr::group_by(individuo) |>
dplyr::mutate(
lag_medida = dplyr::lag(medida)
)
## # A tibble: 8 × 3
## # Groups: individuo [2]
## individuo medida lag_medida
## <int> <dbl> <dbl>
## 1 1 1 NA
## 2 1 2 1
## 3 1 1 2
## 4 1 3 1
## 5 2 4 NA
## 6 2 1 4
## 7 2 2 1
## 8 2 0 2
Observe que a coluna lag_medida
agora contém a medida anterior para cada indivíduo, respeitando os grupos criados pela coluna individuo.
Vamos dar um passo adiante e criar uma nova coluna chamada flag_aumentou, assim como fizemos no exemplo anterior:
tab |>
dplyr::group_by(individuo) |>
dplyr::mutate(
lag_medida = dplyr::lag(medida),
flag_aumentou = medida > lag_medida
)
## # A tibble: 8 × 4
## # Groups: individuo [2]
## individuo medida lag_medida flag_aumentou
## <int> <dbl> <dbl> <lgl>
## 1 1 1 NA NA
## 2 1 2 1 TRUE
## 3 1 1 2 FALSE
## 4 1 3 1 TRUE
## 5 2 4 NA NA
## 6 2 1 4 FALSE
## 7 2 2 1 TRUE
## 8 2 0 2 FALSE
Agora temos a coluna flag_aumentou
indicando se a medida atual é maior que a medida anterior, dentro de cada grupo de indivíduo.
A função lead()
.
Enquanto lag()
retorna valores anteriores de uma coluna, a função lead()
retorna valores seguintes de uma coluna em relação à posição atual.
Como exercício, usando a função lead()
, tente reproduzir os dois exemplos acima comparando o valor atual da coluna medida
agora com o seu valor posterior (e não mais com o anterior).
É isso! Dúvidas, sugestões e críticas, mande aqui nos comentários.