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.)

  1. 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…
  1. 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 ancak ptfsmf 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çin max, minimum değer için min, medyan için median, total değer için sum ve grupladığımız değişkene ait gözlem sayısını saymak için ise n()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,

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,

Burada önemli olan bir nokta, group_by() fonksiyonu ile gruplanmış bir tablo ile farklı işlemlere devam edilmek isteniyorsa hata alınmaması amacıyla ungroup() 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,

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.