Jak obliczyć przesunięcie na grupę za pomocą dplyr


Do obliczenia wartości przesuniętych w grupie w R przy użyciu pakietu dplyr możesz użyć poniższej składni:

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

Uwaga : Funkcja mutate() dodaje nową zmienną do ramki danych zawierającej opóźnione wartości.

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: Oblicz przesunięte wartości według grupy za pomocą dplyr

Załóżmy, że mamy następującą ramkę danych w R, która pokazuje sprzedaż dokonaną przez dwa różne sklepy w różnych dniach:

 #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

Możemy użyć poniższego kodu, aby utworzyć nową kolumnę wyświetlającą opóźnione wartości sprzedaży dla każdego sklepu:

 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

Oto jak zinterpretować wynik:

  • Pierwsza wartość lag1_sales to NA , ponieważ nie ma poprzedniej wartości sprzedaży w sklepie A.
  • Druga wartość lag1_sales to NA , ponieważ nie ma poprzedniej wartości sprzedaży w sklepie B.
  • Trzecia wartość lag1_sales wynosi 7 , ponieważ jest to poprzednia wartość sprzedaży sklepu A.
  • Czwarta wartość lag1_sales wynosi 12 , ponieważ jest to poprzednia wartość sprzedaży sklepu B.

I tak dalej.

Pamiętaj, że możesz także zmienić liczbę używanych opóźnień, zmieniając wartość n w funkcji lag() .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe obliczenia w R:

Jak obliczyć sumę bieżącą za pomocą dplyr
Jak obliczyć sumę według grupy w R
Jak obliczyć średnią na grupę w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *