2 dplyr ile Veri Manipülasyonu
Bu bölümde hedeflenen şey, çok önemli ve oldukça güçlü bir data manipülasyonu paketi olan dplyr
paketinin önemli fonksiyonlarına dair örnekler vererek nasıl kullanılabileceklerini göstermektir. Bu bölümde ele alınacak fonksiyonlar şu şekildedir:
select
/rename
filter
distinct
arrange
mutate
/transmute
group_by
/summarise
Yukarıda bahsedilen bütün fonksiyonlar ayrı ayrı ele alınacak ve her biri için örnek kullanımlar gösterilecektir. Ayrıca “pipe operator” olarak adlandırılan “Bağlantı Operatörü” (%>%
) de kısaca anlatılacak ve bütün döküman boyunca kullanılacaktır.
2.1 Hazırlıklar
Tablonun ilk haline glimpse()
fonksiyonu ile göz atılabilir.
## Observations: 8,760
## Variables: 5
## $ Tarih <dttm> 2019-01-01 00:00:00, 2019-01-01 01:00:00, 2019-01-01 02:00:00,…
## $ PTF <dbl> 100.38, 96.72, 81.60, 38.58, 11.52, 11.14, 11.14, 24.37, 34.50,…
## $ SMF <dbl> 5.00, 95.04, 79.60, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ PDF <dbl> 4.85, 92.19, 77.21, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ NDF <dbl> 103.39, 99.62, 84.05, 39.74, 11.87, 11.47, 11.47, 25.10, 35.53,…
Burada “Bağlantı Operatörü”nün (%>%
) kullanımına dikkat edilmelidir. Eğer bu “Bağlantı Operatörü” kullanılmasaydı aynı işlem şu şekilde gerçekleştirilecekti,
## Observations: 8,760
## Variables: 5
## $ Tarih <dttm> 2019-01-01 00:00:00, 2019-01-01 01:00:00, 2019-01-01 02:00:00,…
## $ PTF <dbl> 100.38, 96.72, 81.60, 38.58, 11.52, 11.14, 11.14, 24.37, 34.50,…
## $ SMF <dbl> 5.00, 95.04, 79.60, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ PDF <dbl> 4.85, 92.19, 77.21, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0…
## $ NDF <dbl> 103.39, 99.62, 84.05, 39.74, 11.87, 11.47, 11.47, 25.10, 35.53,…
Yukarıdaki örnekte tek bir fonksiyon kullanıldığından daha kolay görünmeyebilir ancak şu örnek daha belirleyici olacaktır. (Bu örnekte kullanılan select
fonksiyonu aşağıda daha detaylı anlatılacaktır, burada sadece örnek olması açısından kullanılmıştır.)
- Bağlantı Operatörü kullanılarak PTF ve SMF sütunlarının seçilmesi ve gösterilmesi,
## Observations: 8,760
## Variables: 2
## $ PTF <dbl> 100.38, 96.72, 81.60, 38.58, 11.52, 11.14, 11.14, 24.37, 34.50, 4…
## $ SMF <dbl> 5.00, 95.04, 79.60, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
- Bağlantı Operatörü kullanılmadan PTF ve SMF sütunlarının seçilmesi ve gösterilmesi,
## Observations: 8,760
## Variables: 2
## $ PTF <dbl> 100.38, 96.72, 81.60, 38.58, 11.52, 11.14, 11.14, 24.37, 34.50, 4…
## $ SMF <dbl> 5.00, 95.04, 79.60, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0…
Görebileceğiniz üzere bu operatör sayesinde farklı fonksiyonları iç içe yazmak yerine alt alta daha tertipli bir şekilde yazabiliriz.
Aşağıdaki örnekleri incelerken aklınıza “Uygulanan bu işlemler neden kalıcı olmadı, ptfsmf objesi neden değişmedi?” gibi sorular gelebilir. Bu R programlama dilinin bir özelliğinden kaynaklanmaktadır.
<-
veya=
atama operatörlerinden biri kullanılmadığı sürece yazılan işlemler gerçekleştirilecek ve ekrana yansıtılacak ancakptfsmf
objesinde bir değişiklik olmayacaktır.
Şimdi dplyr
paketinin önemli fonksiyonları ile devam edebiliriz.
2.2 Önemli Fonksiyonlar
2.2.1 select
/rename
select
fonksiyonu belirli sutünları seçmek için kullanılır. Örneğin tablonun sadece Tarih ve Piyasa Takas Fiyatı’nı (PTF) göstermesi isteniyorsa,
## # A tibble: 8,760 x 2
## Tarih PTF
## <dttm> <dbl>
## 1 2019-01-01 00:00:00 100.
## 2 2019-01-01 01:00:00 96.7
## 3 2019-01-01 02:00:00 81.6
## 4 2019-01-01 03:00:00 38.6
## 5 2019-01-01 04:00:00 11.5
## 6 2019-01-01 05:00:00 11.1
## 7 2019-01-01 06:00:00 11.1
## 8 2019-01-01 07:00:00 24.4
## 9 2019-01-01 08:00:00 34.5
## 10 2019-01-01 09:00:00 45.2
## # … with 8,750 more rows
Veya (bu örnek için pek faydalı gibi görünmese de) içinde “P” harfini barındıran sütunlar seçilmek istendiğinde contains
kelimesi kullanılabilir.
## # A tibble: 8,760 x 2
## PTF PDF
## <dbl> <dbl>
## 1 100. 4.85
## 2 96.7 92.2
## 3 81.6 77.2
## 4 38.6 0
## 5 11.5 0
## 6 11.1 0
## 7 11.1 0
## 8 24.4 0
## 9 34.5 0
## 10 45.2 0
## # … with 8,750 more rows
Bu kelime gibi select
fonksiyonu içinde kullanılabilecek diğer kelimeler: starts_with
, ends_with
, matches
olarak sıralanabilir.
Bu kelimeler ve daha fazlasının anlatıldığı dplyr Cheatsheet dökümanına göz atılabilir.
Aynı zamanda, eğer sütunların sırası biliniyorsa iki sütun arasındaki her sütunu seçmek için :
operatörü kullanılabilir. Örneğin Sistem Marjinal Fiyatı (SMF) ve Negatif Dengesizlik Fiyatı (NDF) arasındaki sütunları seçmek için,
## # A tibble: 8,760 x 3
## SMF PDF NDF
## <dbl> <dbl> <dbl>
## 1 5 4.85 103.
## 2 95.0 92.2 99.6
## 3 79.6 77.2 84.0
## 4 0 0 39.7
## 5 0 0 11.9
## 6 0 0 11.5
## 7 0 0 11.5
## 8 0 0 25.1
## 9 0 0 35.5
## 10 0 0 46.6
## # … with 8,750 more rows
rename
fonksiyonu ise adından da anlaşılabileceği üzere bir sütunun adını değiştirmek için kullanılır. Örneğin “PTF” sütununun ismini “ptf” olarak değiştirmek ve sonrasında bu sütunu seçmek istiyorsanız rename
ve select
fonksiyonlarını kullanabilirsiniz.
## # A tibble: 8,760 x 1
## ptf
## <dbl>
## 1 100.
## 2 96.7
## 3 81.6
## 4 38.6
## 5 11.5
## 6 11.1
## 7 11.1
## 8 24.4
## 9 34.5
## 10 45.2
## # … with 8,750 more rows
2.2.2 filter
filter
fonksiyonu temel olarak istenilen koşulları sağlayan satırları seçmek için kullanılır. Örneğin Piyasa Takas Fiyatı’nın 250’den düşük olduğu satırlar incelenebilir.
## # A tibble: 2,453 x 5
## Tarih PTF SMF PDF NDF
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2019-01-01 00:00:00 100. 5 4.85 103.
## 2 2019-01-01 01:00:00 96.7 95.0 92.2 99.6
## 3 2019-01-01 02:00:00 81.6 79.6 77.2 84.0
## 4 2019-01-01 03:00:00 38.6 0 0 39.7
## 5 2019-01-01 04:00:00 11.5 0 0 11.9
## 6 2019-01-01 05:00:00 11.1 0 0 11.5
## 7 2019-01-01 06:00:00 11.1 0 0 11.5
## 8 2019-01-01 07:00:00 24.4 0 0 25.1
## 9 2019-01-01 08:00:00 34.5 0 0 35.5
## 10 2019-01-01 09:00:00 45.2 0 0 46.6
## # … with 2,443 more rows
Gözlem sayısının 8670’ten 2453’e düştüğü görülebiliyor.
Aynı şekilde bir değerin büyüklüğü
>
, küçüklük veya eşitliği<=
, büyüklük veya eşitliği>=
, eşitliği ise==
sembolleriyle incelenebilir.
Birden fazla koşulun sağlanması gerekiyorsa ise, “VE” operatörü için &
, “VEYA” operatörü için |
sembolleri kullanılmalıdır. Örneğin Pozitif Dengesizlik Fiyatı’nın 200’den küçük, Negatif Dengesizlik Fiyatı’nın ise 200’den büyük olduğu satırlar incelenebilir.
## # A tibble: 1,256 x 5
## Tarih PTF SMF PDF NDF
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2019-01-01 17:00:00 287. 172 167. 296.
## 2 2019-01-01 18:00:00 292. 172 167. 300.
## 3 2019-01-01 21:00:00 285. 173 168. 294.
## 4 2019-01-01 22:00:00 205. 173. 168. 211.
## 5 2019-01-02 07:00:00 288. 169. 164. 296.
## 6 2019-01-02 09:00:00 297. 173 168. 306.
## 7 2019-01-02 10:00:00 297. 190 184. 306.
## 8 2019-01-02 19:00:00 293. 190 184. 302.
## 9 2019-01-02 20:00:00 290. 173. 168. 299.
## 10 2019-01-02 21:00:00 289. 173. 168. 297.
## # … with 1,246 more rows
Bu koşulları sağlayan 1256 satır olduğu görülüyor. Eğer bir koşulu sağlamayan satırlar aranıyorsa ise koşulun başına !
yazılmasıyla bu ters etki taratılabilir. Örneğin Piyasa Takas Fiyatı’nın (PTF) 0’dan farklı olduğu satırları bulmak için,
## # A tibble: 8,708 x 5
## Tarih PTF SMF PDF NDF
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2019-01-01 00:00:00 100. 5 4.85 103.
## 2 2019-01-01 01:00:00 96.7 95.0 92.2 99.6
## 3 2019-01-01 02:00:00 81.6 79.6 77.2 84.0
## 4 2019-01-01 03:00:00 38.6 0 0 39.7
## 5 2019-01-01 04:00:00 11.5 0 0 11.9
## 6 2019-01-01 05:00:00 11.1 0 0 11.5
## 7 2019-01-01 06:00:00 11.1 0 0 11.5
## 8 2019-01-01 07:00:00 24.4 0 0 25.1
## 9 2019-01-01 08:00:00 34.5 0 0 35.5
## 10 2019-01-01 09:00:00 45.2 0 0 46.6
## # … with 8,698 more rows
Burada bu koşulu sağlayan 8706 satır olduğu görülüyor.
2.2.3 arrange
arrange
fonksiyonu Excel’deki sıralama özelliğine benzetilebilir. Varsayılan durumunda A’dan Z’ye ya da küçükten büyüğe sıralanır. Tam tersi sıralama için desc()
fonksiyonu kullanılmalıdır. Örneğin artan Piyasa Takas Fiyatlarına göre sıralamak için,
## # A tibble: 8,760 x 5
## Tarih PTF SMF PDF NDF
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2019-02-17 09:00:00 0 30 0 30.9
## 2 2019-03-24 12:00:00 0 5 0 5.15
## 3 2019-03-24 13:00:00 0 0 0 0
## 4 2019-03-24 14:00:00 0 0 0 0
## 5 2019-03-24 15:00:00 0 0 0 0
## 6 2019-03-24 16:00:00 0 10 0 10.3
## 7 2019-04-14 09:00:00 0 0 0 0
## 8 2019-04-14 10:00:00 0 0 0 0
## 9 2019-04-14 13:00:00 0 0 0 0
## 10 2019-04-14 14:00:00 0 0 0 0
## # … with 8,750 more rows
Bir başka örnekte Tarih, Pozitif Dengesizlik Fiyatı (PDF) ve Negatif Dengesizlik Farkı (NDF) sütunları seçilip azalan NDF’ye göre sıralanabilir.
## # A tibble: 8,760 x 3
## Tarih PDF NDF
## <dttm> <dbl> <dbl>
## 1 2019-06-27 15:00:00 436. 515
## 2 2019-06-27 16:00:00 436. 515.
## 3 2019-06-27 14:00:00 454. 502.
## 4 2019-11-11 18:00:00 385. 502.
## 5 2019-06-26 11:00:00 303. 462.
## 6 2019-06-26 14:00:00 307. 450.
## 7 2019-11-11 17:00:00 370. 439.
## 8 2019-11-27 18:00:00 340. 433.
## 9 2019-07-09 15:00:00 373. 433.
## 10 2019-07-09 16:00:00 373. 433.
## # … with 8,750 more rows
Dikkat edileceği üzere NDF değerleri azalarak devam ediyor. Ayrıca arrange
fonksiyonunun içine birden fazla değer girerek ilk değerin eşitliği durumunda ikinci değerin karar vermesi sağlanabilir. Örneğin PTF değerinin 0 olduğu son gün aşağıdaki gibi bulunabilir.
## # A tibble: 8,760 x 2
## Tarih PTF
## <dttm> <dbl>
## 1 2019-06-06 09:00:00 0
## 2 2019-06-05 09:00:00 0
## 3 2019-06-04 16:00:00 0
## 4 2019-06-04 15:00:00 0
## 5 2019-06-04 14:00:00 0
## 6 2019-06-04 13:00:00 0
## 7 2019-06-04 12:00:00 0
## 8 2019-06-04 11:00:00 0
## 9 2019-06-04 10:00:00 0
## 10 2019-06-04 09:00:00 0
## # … with 8,750 more rows
Bu durumda çıkan tabloya göz atıldığında çıkan ilk veri yıl içerisinde PTF’nin 0 olduğu son günü verecektir.
2.2.4 mutate
/transmute
mutate
fonksiyonu genellikle var olan değişkenlerle yapılan operasyonlar sonucu yeni değişkenler (sütunlar) yaratmak için kullanılır.
Örneğin yeni bir gün sütunu eklenmek istenirse (burada lubridate
paketinin as_date()
fonksiyonu kullanılmıştır.),
## # A tibble: 8,760 x 6
## Tarih PTF SMF PDF NDF Gün
## <dttm> <dbl> <dbl> <dbl> <dbl> <date>
## 1 2019-01-01 00:00:00 100. 5 4.85 103. 2019-01-01
## 2 2019-01-01 01:00:00 96.7 95.0 92.2 99.6 2019-01-01
## 3 2019-01-01 02:00:00 81.6 79.6 77.2 84.0 2019-01-01
## 4 2019-01-01 03:00:00 38.6 0 0 39.7 2019-01-01
## 5 2019-01-01 04:00:00 11.5 0 0 11.9 2019-01-01
## 6 2019-01-01 05:00:00 11.1 0 0 11.5 2019-01-01
## 7 2019-01-01 06:00:00 11.1 0 0 11.5 2019-01-01
## 8 2019-01-01 07:00:00 24.4 0 0 25.1 2019-01-01
## 9 2019-01-01 08:00:00 34.5 0 0 35.5 2019-01-01
## 10 2019-01-01 09:00:00 45.2 0 0 46.6 2019-01-01
## # … with 8,750 more rows
Veya Veri Setine İlk Bakış bölümünde anlatıldığı üzere Pozitif Dengesizlik Fiyatı (PDF) hesaplanmak istenirse,
## # A tibble: 8,760 x 6
## Tarih PTF SMF PDF NDF PDF_Yeni
## <dttm> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2019-01-01 00:00:00 100. 5 4.85 103. 4.85
## 2 2019-01-01 01:00:00 96.7 95.0 92.2 99.6 92.2
## 3 2019-01-01 02:00:00 81.6 79.6 77.2 84.0 77.2
## 4 2019-01-01 03:00:00 38.6 0 0 39.7 0
## 5 2019-01-01 04:00:00 11.5 0 0 11.9 0
## 6 2019-01-01 05:00:00 11.1 0 0 11.5 0
## 7 2019-01-01 06:00:00 11.1 0 0 11.5 0
## 8 2019-01-01 07:00:00 24.4 0 0 25.1 0
## 9 2019-01-01 08:00:00 34.5 0 0 35.5 0
## 10 2019-01-01 09:00:00 45.2 0 0 46.6 0
## # … with 8,750 more rows
Dikkat edileceği üzere “PDF_Yeni” ve “PDF” sütunları aynı değerleri gösteriyor. Burada temel R fonksiyonlarının mutate
içerisindeki kullanımına dikkat edilmelidir.
Burada Veri Setine İlk Bakış kısmında anlatıldığı üzere Pozitif Dengesizlik Fiyatı (PDF) hesaplamak için
ifelse
fonksiyonu kullanılmıştır. Burada temel olarak yapılan işlem şudur:PTF<SMF
koşulu doğruysa ilk denklemi (0.97*PTF
) uygula, değilse ikinci denklemi (0.97*SMF
) uygula.
transmute
fonksiyonu da mutate
fonksiyonu ile benzer bir işleve sahip olmasının yanında select
fonksiyonunun belirli sütunları seçme işlevine de sahiptir. Örneğin lubridate
paketinin as_date()
fonksiyonunu kullanarak yeni bir “Gün” sütunu açıp “PTF” ve “SMF” sütunlarını da seçmek ve azalan PTF’ye göre sıralamak için,
## # A tibble: 8,760 x 3
## PTF SMF Gün
## <dbl> <dbl> <date>
## 1 500 450 2019-06-27
## 2 500. 450 2019-06-27
## 3 488. 468. 2019-06-27
## 4 401. 401. 2019-06-27
## 5 400. 400. 2019-06-12
## 6 400. 400. 2019-06-12
## 7 400. 400. 2019-06-12
## 8 397. 487. 2019-11-11
## 9 385 415 2019-07-09
## 10 385 420. 2019-07-09
## # … with 8,750 more rows
2.2.5 group_by
/summarise
Bu iki fonksiyon çoğunlukla özetleme tabloları çıkarmak için kullanılır. group_by
sütunlara göre veriyi gruplamak, summarise
ise gruplanan bu verilere göre istenen özeti çıkarmakla görevlidir. Örneğin günlük ortalama PTF fiyat bilgisi için,
## # A tibble: 365 x 2
## Gün Gunluk_Ort_PTF
## <date> <dbl>
## 1 2019-01-01 121.
## 2 2019-01-02 229.
## 3 2019-01-03 239.
## 4 2019-01-04 212.
## 5 2019-01-05 244.
## 6 2019-01-06 237.
## 7 2019-01-07 247.
## 8 2019-01-08 248.
## 9 2019-01-09 220.
## 10 2019-01-10 163.
## # … with 355 more rows
Burada kullanılan
mean
fonksiyonu dışında maksimum değer içinmax
, minimum değer içinmin
, medyan içinmedian
, total değer içinsum
ve grupladığımız değişkene ait gözlem sayısını saymak için isen()
fonksiyonları kullanılabilir.
2.2.6 distinct
distinct
fonksiyonu bir veya birden fazla sütunu baz alarak özgün satırları bulmak için kullanılır. Örneğin var olan tabloda bir “Gün” sütunu var ve her güne dair yalnızca bir değer incelenmek isteniyor. Bu durumdan kurtulmak için distinct
fonksiyonu kullanılabilir. Örneğin,
## # A tibble: 365 x 1
## Gün
## <date>
## 1 2019-01-01
## 2 2019-01-02
## 3 2019-01-03
## 4 2019-01-04
## 5 2019-01-05
## 6 2019-01-06
## 7 2019-01-07
## 8 2019-01-08
## 9 2019-01-09
## 10 2019-01-10
## # … with 355 more rows
Dikkat edileceği üzere yalnızca Gün sütunu korundu. Diğer sütunları da korumak için .keep_all = TRUE
komutu kullanılmalıdır.
## # A tibble: 365 x 6
## Tarih PTF SMF PDF NDF Gün
## <dttm> <dbl> <dbl> <dbl> <dbl> <date>
## 1 2019-01-01 00:00:00 100. 5 4.85 103. 2019-01-01
## 2 2019-01-02 00:00:00 105. 103. 99.9 108. 2019-01-02
## 3 2019-01-03 00:00:00 126. 52 50.4 130. 2019-01-03
## 4 2019-01-04 00:00:00 104. 50 48.5 107. 2019-01-04
## 5 2019-01-05 00:00:00 178. 100 97 184. 2019-01-05
## 6 2019-01-06 00:00:00 286. 271 263. 294. 2019-01-06
## 7 2019-01-07 00:00:00 200. 100. 97.1 206. 2019-01-07
## 8 2019-01-08 00:00:00 199. 120 116. 205. 2019-01-08
## 9 2019-01-09 00:00:00 199. 98.8 95.8 205. 2019-01-09
## 10 2019-01-10 00:00:00 4.42 0.1 0.1 4.55 2019-01-10
## # … with 355 more rows
Burada gözlem sayısının 365’e düştüğüne dikkat edilmelidir.
2.3 Örnekler
Bu bölümde, kolaydan zora örnekler ele alınacak ve dplyr
paketi daha da pekiştirilmeye çalışılacaktır. Soruların cevapları hemen soruların altında olacaktır ancak cevaplara göz atmadan önce soruları çözmeye çalışmanızı şiddetle tavsiye ediyoruz.
Devamlı bir gelişim gösteren kitabımıza yeni örnekler eklemeyi sürdüreceğiz.
2.3.1 Basit Seviye
1. Piyasa Takas Fiyatı (PTF) verisinin aylık ortalama, medyan, maksimum ve minimum değerlerini bulunuz.
İpucu: lubridate
paketinin month()
fonksiyonunu kullanabilirsiniz.
Sonuç olarak şu şekilde bir tablo ortaya çıkmalı,
## # A tibble: 12 x 5
## Ay ORT MED MAKS MIN
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 223. 258. 327. 0.5
## 2 2 257. 275. 330. 0
## 3 3 256. 296. 332. 0
## 4 4 187. 200. 309. 0
## 5 5 196. 220. 317. 0
## 6 6 221. 275. 500 0
## 7 7 305. 315. 385 50.0
## 8 8 298. 310. 330. 0.99
## 9 9 298. 307. 325. 45
## 10 10 292. 309. 338 10
## 11 11 298. 313. 397. 50
## 12 12 291. 314. 338. 45.0
Cevap ise şu şekilde,
ptfsmf %>%
mutate(Ay=month(Tarih)) %>%
group_by(Ay) %>%
summarise(ORT = mean(PTF), MED = median(PTF), MAKS = max(PTF), MIN = min(PTF))
2. Yaz aylarının (Haziran, Temmuz, Ağustos ayları) akşam saatlerinde (18-22 arası, bu değerler dahil olmak üzere) ortaya çıkan günlük toplam NDF değerlerini bulunuz.
İpucu: Saatleri bulmak için lubridate
paketinin hour()
fonksiyonunu, tarihi güne çevirmek için ise yine aynı paketten as_date()
fonksiyonunu kullanabilirsiniz.
Sonuç olarak şu şekilde bir tablo ortaya çıkmalı,
## # A tibble: 92 x 2
## Tarih NDF
## <date> <dbl>
## 1 2019-06-01 1957
## 2 2019-06-02 1849.
## 3 2019-06-03 1516.
## 4 2019-06-04 726.
## 5 2019-06-05 1103.
## 6 2019-06-06 1496.
## 7 2019-06-07 1646.
## 8 2019-06-08 1513.
## 9 2019-06-09 1117.
## 10 2019-06-10 1558.
## # … with 82 more rows
Cevap ise şu şekilde,
2.3.2 İleri Seviye
1. SMF/PTF oranının aylara göre en yüksek olduğu üçer gözlemi bulunuz.
İpucu: İstediğiniz sayıda satırı seçmek için slice()
fonksiyonunu kullanabilirsiniz. slice()
fonksiyonunun kullanımı için dplyr Cheatsheet dökümanına göz atılabilir.
Sonuç olarak şu şekilde bir tablo ortaya çıkmalı,
## # A tibble: 36 x 3
## Tarih Ay SMF_PTF_Orani
## <dttm> <dbl> <dbl>
## 1 2019-01-13 16:00:00 1 2.03
## 2 2019-01-28 04:00:00 1 1.71
## 3 2019-01-13 11:00:00 1 1.53
## 4 2019-02-24 13:00:00 2 51.3
## 5 2019-02-10 09:00:00 2 28.4
## 6 2019-02-24 15:00:00 2 18.6
## 7 2019-03-24 17:00:00 3 15.5
## 8 2019-03-29 23:00:00 3 15.3
## 9 2019-03-24 18:00:00 3 8.25
## 10 2019-04-21 12:00:00 4 100
## # … with 26 more rows
Cevap ise şu şekilde,
ptfsmf %>%
filter(!(PTF == 0)) %>%
mutate(Ay = month(Tarih)) %>%
mutate(SMF_PTF_Orani = SMF / PTF) %>%
group_by(Ay) %>%
arrange(desc(SMF_PTF_Orani)) %>%
slice(1:3) %>%
ungroup() %>%
select(Tarih, Ay, SMF_PTF_Orani)
Burada önemli olan bir nokta,
group_by()
fonksiyonu ile gruplanmış bir tablo ile farklı işlemlere devam edilmek isteniyorsa hata alınmaması amacıylaungroup()
fonksiyonunun kullanılması gerektiğidir.
2. Her bir günün ortalama PTF değerlerleri ile birlikte yeni bir sütunda tam bir hafta önceki ortalama PTF değerini gösteriniz.
İpucu: Haftanın günlerini çıkarmak için R
’ın kendi fonksiyonu olan weekdays()
fonksiyonunu, tabloda kaydırma yapmak için ise dplyr
paketinin lag()
fonksiyonu kullanılabilir.
Sonuç olarak şu şekilde bir tablo ortaya çıkmalı (İlk 7 günün geçmiş verisi olmadığından o satırlar slice()
fonksiyonu yardımıyla silinmiştir.),
## # A tibble: 716 x 4
## Tarih Gün PTF_Degisim PTF_Degerleri
## <date> <chr> <chr> <dbl>
## 1 2019-01-08 Tuesday ÖncekiHaftaPTF 121.
## 2 2019-01-08 Tuesday PTF 248.
## 3 2019-01-09 Wednesday ÖncekiHaftaPTF 229.
## 4 2019-01-09 Wednesday PTF 220.
## 5 2019-01-10 Thursday ÖncekiHaftaPTF 239.
## 6 2019-01-10 Thursday PTF 163.
## 7 2019-01-11 Friday ÖncekiHaftaPTF 212.
## 8 2019-01-11 Friday PTF 180.
## 9 2019-01-12 Saturday ÖncekiHaftaPTF 244.
## 10 2019-01-12 Saturday PTF 237.
## # … with 706 more rows
Cevap ise şu şekilde,
ptfsmf %>%
mutate(Tarih = as_date(Tarih)) %>%
group_by(Tarih) %>%
summarise(PTF = mean(PTF)) %>%
ungroup() %>%
mutate(Gün = weekdays(Tarih)) %>%
mutate(ÖncekiHaftaPTF = lag(x = PTF, n = 7)) %>%
select(Tarih, Gün, ÖncekiHaftaPTF, PTF) %>%
slice(8:n()) %>%
pivot_longer(cols=c(ÖncekiHaftaPTF, PTF), names_to="PTF_Degisim",
values_to="PTF_Degerleri") %>%
arrange(Tarih)
Burada tidyr
paketinin pivot_longer()
fonksiyonu bulunuyor. Bu fonksiyon temel olarak geniş tabloları belirli sütunlarını bir ortak sütun içerisinde birleştirip bunu yaparken de satır sayısını birleştirilen sütun sayısı oranında artıran bir fonksiyondur.