Dplyr kullanarak grup başına ofset nasıl hesaplanır


R’de grup kaydırmalı değerleri dplyr paketini kullanarak hesaplamak için aşağıdaki sözdizimini kullanabilirsiniz:

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

Not : mutate() işlevi, gecikmeli değerleri içeren veri çerçevesine yeni bir değişken ekler.

Aşağıdaki örnek, bu sözdiziminin pratikte nasıl kullanılacağını gösterir.

Örnek: Dplyr kullanarak kaydırılan değerleri gruba göre hesaplama

Diyelim ki R’de iki farklı mağazanın farklı günlerde yaptığı satışları gösteren aşağıdaki veri çerçevesine sahibiz:

 #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

Her mağazanın gecikmeli satış değerlerini görüntüleyen yeni bir sütun oluşturmak için aşağıdaki kodu kullanabiliriz:

 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

Sonucun nasıl yorumlanacağı aşağıda açıklanmıştır:

  • Lag1_sales’in ilk değeri NA’dır çünkü A mağazasının satışları için önceki bir değer yoktur.
  • lag1_sales’in ikinci değeri NA’dır çünkü B mağazasının satışları için önceki bir değer yoktur.
  • lag1_sales’in üçüncü değeri 7’dir çünkü A mağazasının önceki satış değeridir.
  • lag1_sales’in dördüncü değeri 12’dir çünkü B mağazasının önceki satış değeridir.

Ve benzeri.

Lag() işlevinde n’nin değerini değiştirerek kullanılan gecikme sayısını da değiştirebileceğinizi unutmayın.

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer yaygın hesaplamaların nasıl gerçekleştirileceği açıklanmaktadır:

dplyr kullanarak bir cari toplam nasıl hesaplanır
R’de gruba göre toplam nasıl hesaplanır
R’de grup başına ortalama nasıl hesaplanır

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir