Como calcular o deslocamento por grupo usando dplyr


Você pode usar a seguinte sintaxe para calcular valores deslocados de grupo em R usando o pacote dplyr :

 df %>%
  group_by(var1) %>%
  mutate(lag1_value = lag(var2, n= 1 , order_by=var1))

Nota : A função mutate() adiciona uma nova variável ao quadro de dados que contém os valores atrasados.

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: Calcular valores deslocados por grupo usando dplyr

Suponha que temos o seguinte quadro de dados em R que mostra as vendas realizadas por duas lojas diferentes em dias diferentes:

 #create data frame
df <- data. frame (store=c('A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'),
                 sales=c(7, 12, 10, 9, 9, 11, 18, 23))

#view data frame
df

  blind sales
1 to 7
2 B 12
3 to 10
4 B 9
5 to 9
6 B 11
7 to 18
8 B 23

Podemos usar o código a seguir para criar uma nova coluna que exiba os valores de vendas defasadas de cada loja:

 library (dplyr)

#calculate lagged sales by group
df %>%
  group_by(store) %>%
  mutate(lag1_sales = lag(sales, n= 1 , order_by=store))

# A tibble: 8 x 3
# Groups: store[2]
  store sales lag1_sales
1 to 7 NA
2 B 12 NA
3 to 10 7
4 B 9 12
5 to 9 10
6 B 11 9
7 to 18 9
8 B 23 11

Veja como interpretar o resultado:

  • O primeiro valor de lag1_sales é NA porque não existe valor anterior para as vendas da loja A.
  • O segundo valor de lag1_sales é NA porque não existe valor anterior para as vendas da loja B.
  • O terceiro valor de lag1_sales é 7 porque é o valor de vendas anterior da loja A.
  • O quarto valor de lag1_sales é 12 porque é o valor de vendas anterior da loja B.

E assim por diante.

Observe que você também pode alterar o número de atrasos usados alterando o valor de n na função lag() .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outros cálculos comuns em R:

Como calcular uma soma acumulada usando dplyr
Como calcular soma por grupo em R
Como calcular a média por grupo em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *