Veri Dönüştürme

https://tidyr.tidyverse.org/

https://tidyr.tidyverse.org/

Veri dönüştürme işlemleri, veri setlerinin yapılarını değiştirerek veri analizi veya görselleştirme işlemleri için daha uygun hale getirir. Bu işlemler, veri setlerinin formatlarını veya içeriğini değiştirerek veri analizini kolaylaştırır, sonuçların daha anlamlı olmasını sağlar ve genellikle veri hazırlığı sürecinin önemli bir parçasıdır.

R programlama dilinde tidyr paketinin içinde bulunan pivot_longer(), pivot_wider(), unite(), ve separate() gibi fonksiyonlar, veri manipülasyonu ve veri dönüşümü işlemlerinde kullanılır. Bu fonksiyonlar, veri çerçevesi içindeki verileri yeniden düzenlemek, sütunları birleştirmek veya bölmek, veriyi daha uygun bir yapıya getirmek için kullanılır.

Veri dönüştürme işlemleri, genellikle şu iki temel kategori altında incelenebilir:

  1. Yapısal Dönüşümler: Bu tür dönüşümler, veri setinin yapısal yapısını değiştirir. Örneğin, pivot_longer ve pivot_wider fonksiyonları geniş formatlı (wide format) ve uzun formatlı (long format) veri setleri arasında dönüşümler gerçekleştirir. Bu işlemler, veri setlerinin gözlemleri ve değişkenleri arasındaki ilişkiyi değiştirir ve genellikle analiz için daha uygun bir yapıya dönüştürür.

  2. İçerik Dönüşümleri: Bu tür dönüşümler, veri setindeki değerlerin içeriğini değiştirir. Örneğin, unite ve separate fonksiyonları bir sütundaki değerleri birleştirerek veya ayırarak yeni değişkenler oluşturur. Bu işlemler, veri setindeki bilgilerin organize edilmesini veya ayrıştırılmasını sağlar.

Her bir fonksiyonun argümanları ve yapıları farklıdır ve bu argümanlar, işlevin belirli bir görevi yerine getirmesini sağlar.

Uzun Format Dönüşümü - pivot_longer

Geniş formatlı (wide format) veriyi uzun formatlı (long format) hale dönüştürmek için kullanılır. Her bir sütunun bir değişkeni temsil ettiği geniş formatlı veri setlerini, her bir gözlemi temsil eden uzun formatlı veri setlerine dönüştürmek için kullanılır.

  • Kullanım Alanları:

    • Çapraz-tablo verilerini analiz etmek veya görselleştirmek için.

    • İstatistiksel analizlerde veri hazırlığı sürecinde, bazı modellere uygun hale getirmek için.

    • Veri setindeki değişkenlerin (sütunların) gruplandırılması veya kategorize edilmesi gerektiğinde.

pivot_longer(data, cols, names_to, values_to, names_prefix = NULL, names_sep = "_", names_pattern = NULL, ...)
  • data: İşlem yapılacak olan veri seti.

  • cols: Uzun formatlı hale dönüştürülecek sütunların belirtilmesi.

  • names_to: Yeni oluşturulacak sütunun adı.

  • values_to: Sütun içerisindeki değerlerin yer alacağı sütunun adı.

  • Diğer argümanlar, isteğe bağlı olarak sütun adlarının belirtilmesi için kullanılır.

Çeşitli örnekler yapmak için billboard veri setini kullanalım. billboard veri seti, tidyr paketinde bulunan ve müzik endüstrisindeki popülerlik sıralamalarını içeren bir veri setidir. Veri seti, 1999-2000 yılları arasında Billboard Hot 100 listesindeki şarkıların haftalık sıralamalarını içerir. Her bir hafta için bir sütun bulunur ve bu sütunlar, o haftadaki şarkıların sıralamalarını içerir. Öncelikle veri setini inceleyelim.

library(tidyr)
billboard
# A tibble: 317 × 79
   artist     track date.entered   wk1   wk2   wk3   wk4   wk5   wk6   wk7   wk8
   <chr>      <chr> <date>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 2 Pac      Baby… 2000-02-26      87    82    72    77    87    94    99    NA
 2 2Ge+her    The … 2000-09-02      91    87    92    NA    NA    NA    NA    NA
 3 3 Doors D… Kryp… 2000-04-08      81    70    68    67    66    57    54    53
 4 3 Doors D… Loser 2000-10-21      76    76    72    69    67    65    55    59
 5 504 Boyz   Wobb… 2000-04-15      57    34    25    17    17    31    36    49
 6 98^0       Give… 2000-08-19      51    39    34    26    26    19     2     2
 7 A*Teens    Danc… 2000-07-08      97    97    96    95   100    NA    NA    NA
 8 Aaliyah    I Do… 2000-01-29      84    62    51    41    38    35    35    38
 9 Aaliyah    Try … 2000-03-18      59    53    38    28    21    18    16    14
10 Adams, Yo… Open… 2000-08-26      76    76    74    69    68    67    61    58
# ℹ 307 more rows
# ℹ 68 more variables: wk9 <dbl>, wk10 <dbl>, wk11 <dbl>, wk12 <dbl>,
#   wk13 <dbl>, wk14 <dbl>, wk15 <dbl>, wk16 <dbl>, wk17 <dbl>, wk18 <dbl>,
#   wk19 <dbl>, wk20 <dbl>, wk21 <dbl>, wk22 <dbl>, wk23 <dbl>, wk24 <dbl>,
#   wk25 <dbl>, wk26 <dbl>, wk27 <dbl>, wk28 <dbl>, wk29 <dbl>, wk30 <dbl>,
#   wk31 <dbl>, wk32 <dbl>, wk33 <dbl>, wk34 <dbl>, wk35 <dbl>, wk36 <dbl>,
#   wk37 <dbl>, wk38 <dbl>, wk39 <dbl>, wk40 <dbl>, wk41 <dbl>, wk42 <dbl>, …

artist: Şarkının sanatçısının adı.

track: Şarkının adı.

date.entered: Şarkının Billboard Hot 100 listesine girdiği tarih.

wk1, wk2, …, wk76: Haftalık sıralama bilgilerini içeren sütunlar. Her bir sütun, bir haftaya ait sıralamaları içerir. Örneğin, wk1 sütunu, şarkının ilk haftadaki sıralamasını içerir.

Bu değişkenler, şarkıların sanatçıları, adları ve haftalık sıralamaları gibi bilgileri içerir. Veri setindeki haftalık sıralama sütunları, her bir hafta için şarkıların sıralamasını içerir. Bu sıralama bilgileri, her bir hafta için bir sütunda bulunur ve bu sütunlar “wk1”, “wk2”, …, “wk76” gibi adlarla temsil edilir.

Dikkat edilirse tablonun 317 satır ve 79 sütundan oluştuğu görülmektedir. Ayrıca hafta değişkenleri yatay olarak herbiri ayrı kolonlarda hafta numaraları ile belirtilmektedir. Şimdi bu verii uzun formata dönüştürerek daha kullanışlı bir formata dönüştürelim.

billboard_long <- billboard |> 
  pivot_longer(
    cols = starts_with("wk"), 
    names_to = "week", 
    values_to = "rank",
    values_drop_na = TRUE
  )

billboard_long
# A tibble: 5,307 × 5
   artist  track                   date.entered week   rank
   <chr>   <chr>                   <date>       <chr> <dbl>
 1 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk1      87
 2 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk2      82
 3 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk3      72
 4 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk4      77
 5 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk5      87
 6 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk6      94
 7 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk7      99
 8 2Ge+her The Hardest Part Of ... 2000-09-02   wk1      91
 9 2Ge+her The Hardest Part Of ... 2000-09-02   wk2      87
10 2Ge+her The Hardest Part Of ... 2000-09-02   wk3      92
# ℹ 5,297 more rows
  1. billboard |>: Bu ifade, “billboard” veri setini işlemek üzere bir dizi dplyr fonksiyonuna (veya tidyverse fonksiyonuna) zincirlenmiş bir işlem başlatır. |> operatörü, bir işlemin çıktısını bir sonraki işlemin ilk argümanı olarak kullanmamızı sağlar.

  2. pivot_longer(): Bu fonksiyon, veri setindeki sütunları uzun formata dönüştürmek için kullanılır. Yani, sütunları satırlara dönüştürür. Bu örnekte, pivot_longer fonksiyonu kullanılarak sütunlar uzun formata dönüştürülecektir.

  3. cols = starts_with("wk"): pivot_longer fonksiyonunun ilk argümanı olan cols, dönüştürülecek sütunların seçimini belirler. Bu durumda, “wk” ile başlayan sütunlar seçilir. “wk” ile başlayan sütunlar, haftalık müzik sıralamalarını içerir.

  4. names_to = "week": pivot_longer fonksiyonunun ikinci argümanı olan names_to, dönüştürülen sütunların isimlerinin atanacağı yeni sütunun adını belirler. Bu durumda, dönüştürülen sütunların isimleri “week” olarak atanacaktır.

  5. values_to = "rank": pivot_longer fonksiyonunun üçüncü argümanı olan values_to, dönüştürülen sütunlardaki değerlerin atanacağı yeni sütunun adını belirler. Bu durumda, dönüştürülen sütunlardaki değerler “rank” olarak atanacaktır.

  6. values_drop_na = TRUE: Bu parametre, dönüştürülen sütunlardaki NA değerlerin (boş hücrelerin) kaldırılıp kaldırılmayacağını belirler. TRUE olarak ayarlandığında, NA değerler kaldırılır. Bu, dönüştürülen sütunlardaki eksik değerlerin işlenme şeklini kontrol eder. Bu örnekte, NA değerler kaldırılarak işlenir.

Bu şekilde, pivot_longer fonksiyonu kullanılarak “wk” ile başlayan sütunlar uzun formata dönüştürülür ve her bir hafta için şarkı sıralamaları tek bir sütun altında toplanır. “week” sütunu, hafta numaralarını, “rank” sütunu ise şarkı sıralamalarını içerir.

dim(billboard_long)
[1] 5307    5

Uzun formata dönüştürüldükten sonra, her bir hafta için her bir şarkının sıralamasını içeren sütunlar tek bir sütun altında toplanır. Bu, sütun sayısının azaldığı anlamına gelirken, satır sayısının arttığı anlamına gelir. Dolayısıyla, tablo boyutunda bir değişiklik olur. Örneğin, başlangıçta her hafta için bir sütun vardı ve bu sütunlar “wk1”, “wk2”, …, “wk76” olarak adlandırılıyordu. Ancak uzun formata dönüştürdükten sonra, her bir şarkının her hafta için bir sıralama değeri içeren bir sütunu vardır. Bu, sütun sayısının arttığı ve satır sayısının da arttığı bir durumdur. Dolayısı ile uzun tablonun boyutu 5307 satır ve 5 kolondan oluşmaktadır.

Önemli

Eğer values_drop_na = TRUE argümanında FALSE değerini kullansaydık daha fazla satır sayısına sahip bir sonuç elde ederdik.

billboard_long_with_na <- billboard |> 
  pivot_longer(
    cols = starts_with("wk"), 
    names_to = "week", 
    values_to = "rank",
    values_drop_na = FALSE
  )

dim(billboard_long_with_na)
[1] 24092     5

Bu şekilde üretilen tablonu satır sayısına baktığımızda 24092 satır olduğunu görürüz. Bu aslında başlangıçta yer alan 317 satırın 76 hafta verisi (wk ile başlayan 76 hafta olduğundan) ile tekrarlaması anlamına gelir. Doğal olarak 317 * 76 = 24092 satır sayısı ortaya çıkar ve wk ile başlamayan sütunlar da tekrar ederek satırlarda oluşur.

Eğer veri setini daha düzenli hale getirmek amacıyla week kolonundaki değerlerin başındak wk ifadesini kaldırmak istersek aşağıdaki şekilde bir düzenleme yapabiliriz.

billboard |> 
  pivot_longer(
    cols = starts_with("wk"), 
    names_to = "week", 
    names_transform = readr::parse_number,
    values_to = "rank",
    values_drop_na = TRUE,
  )
# A tibble: 5,307 × 5
   artist  track                   date.entered  week  rank
   <chr>   <chr>                   <date>       <dbl> <dbl>
 1 2 Pac   Baby Don't Cry (Keep... 2000-02-26       1    87
 2 2 Pac   Baby Don't Cry (Keep... 2000-02-26       2    82
 3 2 Pac   Baby Don't Cry (Keep... 2000-02-26       3    72
 4 2 Pac   Baby Don't Cry (Keep... 2000-02-26       4    77
 5 2 Pac   Baby Don't Cry (Keep... 2000-02-26       5    87
 6 2 Pac   Baby Don't Cry (Keep... 2000-02-26       6    94
 7 2 Pac   Baby Don't Cry (Keep... 2000-02-26       7    99
 8 2Ge+her The Hardest Part Of ... 2000-09-02       1    91
 9 2Ge+her The Hardest Part Of ... 2000-09-02       2    87
10 2Ge+her The Hardest Part Of ... 2000-09-02       3    92
# ℹ 5,297 more rows

Bu kodda, pivot_longer fonksiyonunu kullanarak “wk” ile başlayan sütunları uzun formata dönüştürüyoruz. Ancak, bu sefer names_transform argümanını da kullanıyoruz. Bu argüman, sütun adlarından sayısal değerleri çıkarmak için readr::parse_number fonksiyonunu kullanır.

names_transform = readr::parse_number ifadesiyle, sütun adlarından “wk” ifadesini ve ardından gelen sayısal değerleri ayırıyoruz. Örneğin, “wk1”, “wk2”, …, “wk76” gibi sütun adlarından sadece sayısal kısmı alarak, her bir sütunun haftayı temsil etmesini sağlıyoruz. Böylelikle, uzun formata dönüşümü daha anlamlı hale getiriyoruz. Artık her bir sütun, hangi haftaya ait olduğunu temsil ederken, her bir satır bir şarkının o haftaki sıralamasını içerir. Bu sayede, veri seti daha düzenli hale gelir ve analizler için daha uygun hale gelir.

Alternatif Yol

Bu amaçla aşağıdaki kod da benzer işi yapmaktadır.

billboard |> 
  pivot_longer(
    cols = starts_with("wk"), 
    names_to = "week", 
    names_prefix = "wk",   # Her bir değişken adının başından "wk" metni kaldırır
    names_transform = as.integer,   # Sütun adlarından sayısal değerleri alır
    values_to = "rank",
    values_drop_na = TRUE,
  )
# A tibble: 5,307 × 5
   artist  track                   date.entered  week  rank
   <chr>   <chr>                   <date>       <int> <dbl>
 1 2 Pac   Baby Don't Cry (Keep... 2000-02-26       1    87
 2 2 Pac   Baby Don't Cry (Keep... 2000-02-26       2    82
 3 2 Pac   Baby Don't Cry (Keep... 2000-02-26       3    72
 4 2 Pac   Baby Don't Cry (Keep... 2000-02-26       4    77
 5 2 Pac   Baby Don't Cry (Keep... 2000-02-26       5    87
 6 2 Pac   Baby Don't Cry (Keep... 2000-02-26       6    94
 7 2 Pac   Baby Don't Cry (Keep... 2000-02-26       7    99
 8 2Ge+her The Hardest Part Of ... 2000-09-02       1    91
 9 2Ge+her The Hardest Part Of ... 2000-09-02       2    87
10 2Ge+her The Hardest Part Of ... 2000-09-02       3    92
# ℹ 5,297 more rows

Bu kod parçası öncekiyle benzer bir dönüşüm gerçekleştiriyor ancak birkaç farklılık bulunuyor.

  1. names_prefix = "wk" : Bu argüman her bir değişken adının başından “wk” metni kaldırır. Yani, “wk1”, “wk2”, …, “wk76” gibi sütun adlarından “wk” metni kaldırılır. Bu, her bir sütunun hangi haftaya ait olduğunu temsil eden sayısal değerlerin elde edilmesini sağlar.

  2. names_transform = as.integer: Bu argüman, sütun adlarından sayısal değerleri almak için as.integer fonksiyonunu kullanır. Önceki örnekte olduğu gibi, sütun adlarından sayıları alırken bu sefer as.integer fonksiyonunu kullanarak sayıları dönüştürürüz.

Bu dönüşüm, önceki örnekle benzerdir ancak sütun adlarının öne eklenmesi ve sayısal dönüşümün yapıldığı yerdeki farklılıklar dikkate alınmalıdır. Bu farklılıklar, dönüşüm sonucunda elde edilen uzun formatlı veri setinin nasıl yapılandırıldığına ve nasıl yorumlanacağına etki edebilir.

Geniş Format Dönüşümü - pivot_wider

Uzun formatlı (long format) veriyi geniş formatlı (wide format) hale dönüştürmek için kullanılır. Her bir gözlemi temsil eden uzun formatlı veri setlerini, her bir sütunun bir değişkeni temsil ettiği geniş formatlı veri setlerine dönüştürmek için kullanılır.

  • Kullanım Alanları:

    • Çapraz-tablo verilerini oluşturmak için.

    • Uzun formatlı veri setlerini daha okunabilir ve anlamlı bir şekilde görselleştirmek için.

    • Veri setindeki bazı grupların veya kategorilerin karşılaştırılması için.

pivot_wider(data, names_from, values_from, values_fn = list, values_fill = list(), names_prefix = NULL, names_sep = "_", names_repair = "check_unique", id_cols = NULL, values_fn_args = list(), ...)
  • data: İşlem yapılacak olan veri seti.

  • names_from: Geniş formatlı hale dönüştürülecek olan sütunların adı.

  • values_from: Yeni sütunlara değerlerin alınacağı sütunun adı.

  • Diğer argümanlar, isteğe bağlı olarak sütun adlarının belirtilmesi ve eksik değerlerin doldurulması için kullanılır.

Bu fonksiyon ile bazı örnekler yapmak için tidyr paketindeki us_rent_income veri setini kullanabiliriz. Veri seti 2017 yılına ait American Community Survey ile edilmiştir. Bu araştırma Amerika Birleşik Devletleri’nde federal hükümet tarafından her yıl gerçekleştirilen bir nüfus sayımı ve sosyo-ekonomik anket programıdır. Bu anket, Amerika’nın demografik ve ekonomik özellikleri hakkında geniş kapsamlı veriler sağlar.

us_rent_income
# A tibble: 104 × 5
   GEOID NAME       variable estimate   moe
   <chr> <chr>      <chr>       <dbl> <dbl>
 1 01    Alabama    income      24476   136
 2 01    Alabama    rent          747     3
 3 02    Alaska     income      32940   508
 4 02    Alaska     rent         1200    13
 5 04    Arizona    income      27517   148
 6 04    Arizona    rent          972     4
 7 05    Arkansas   income      23789   165
 8 05    Arkansas   rent          709     5
 9 06    California income      29454   109
10 06    California rent         1358     3
# ℹ 94 more rows

Veri setinde 104 satır ve 5 sütun bulunmaktadır.

  1. GEOID: Bu değişken, Amerika Birleşik Devletleri’ndeki belirli bir coğrafi alanın benzersiz kimlik numarasını içerir. FIP state identifier olarak bilinen bu değişken, Amerika Birleşik Devletleri’ndeki bir eyaletin Federal Bilgi İşlem Standartları (FIPS) kodunu içerir.

  2. NAME: Bu değişken, eyaletin veya coğrafi bölgenin adını içerir.

  3. variable: Bu değişken, veri setinde ölçülen değişkenin adını belirtir. İki farklı değer alabilir: “income” (ortalama yıllık gelir) veya “rent” (ortalama aylık kira).

  4. estimate: Bu değişken, belirli bir coğrafi alandaki tahmini değeri içerir. Örneğin, belirli bir eyalet için ortalama yıllık gelir veya ortalama aylık kira miktarı gibi.

  5. moe: Bu değişken, tahmini değerin 90% güven aralığı içindeki marj hatasını (margin of error) içerir. Marj hatası, tahmini değerin gerçek değerden ne kadar sapabileceğini gösterir. Bu, tahminin güvenilirliğini değerlendirmeye yardımcı olur.

us_rent_income |> 
  pivot_wider(
    names_from = variable,
    values_from = c(estimate, moe)
  )
# A tibble: 52 × 6
   GEOID NAME                 estimate_income estimate_rent moe_income moe_rent
   <chr> <chr>                          <dbl>         <dbl>      <dbl>    <dbl>
 1 01    Alabama                        24476           747        136        3
 2 02    Alaska                         32940          1200        508       13
 3 04    Arizona                        27517           972        148        4
 4 05    Arkansas                       23789           709        165        5
 5 06    California                     29454          1358        109        3
 6 08    Colorado                       32401          1125        109        5
 7 09    Connecticut                    35326          1123        195        5
 8 10    Delaware                       31560          1076        247       10
 9 11    District of Columbia           43198          1424        681       17
10 12    Florida                        25952          1077         70        3
# ℹ 42 more rows

Bu kod, us_rent_income veri setini pivot_wider() fonksiyonu ile veri setindeki uzun formattan geniş formata dönüştürmeye olanak tanır.

  • names_from = variable: Bu argüman, genişletilecek sütunların isimlerini belirtir. Burada variable değişkeni kullanılarak genişletilecek sütunlar belirlenir. Bu durumda, variable değişkenindeki değerler (income ve rent) sütun adlarına dönüştürülecek.

  • values_from = c(estimate, moe): Bu argüman, yeni genişletilmiş sütunların değerlerinin hangi sütunlardan alınacağını belirtir. estimate ve moe sütunlarındaki değerler, genişletilmiş sütunların içeriğini oluşturur.

Sonuç olarak, bu kod us_rent_income veri setini income_estimate, income_moe, rent_estimate ve rent_moe olmak üzere dört yeni sütun içeren bir geniş formatlı veri setine dönüştürür.

Dikkat edilirse değişken isimlerinin arasına "_" ifadesi konmuştur. Bu ifadenin gelmesinin sebebi, pivot_wider() fonksiyonunda kullanılan names_sep parametresinin varsayılan değerinin "_" olmasından kaynaklıdır. Eğer names_sep parametresi belirtilmezse değişken isimlerinin arasında "_" kullanılır.

Bu nedenle, values_from = c(estimate, moe) ifadesindeki estimate ve moe sütunları, genişletilmiş sütunların adlarında alt çizgi ile ayrılır. Sonuç olarak, yeni oluşturulan sütunlar income_estimate, income_moe, rent_estimate ve rent_moe adlarına sahip olur. Eğer "_" yerine "." (nokta) koymak istersek kodu aşağıdaki şekilde güncellememiz gerekir.

us_rent_income |> 
  pivot_wider(
    names_from = variable,
    values_from = c(estimate, moe),
    names_sep = "."
  )
# A tibble: 52 × 6
   GEOID NAME                 estimate.income estimate.rent moe.income moe.rent
   <chr> <chr>                          <dbl>         <dbl>      <dbl>    <dbl>
 1 01    Alabama                        24476           747        136        3
 2 02    Alaska                         32940          1200        508       13
 3 04    Arizona                        27517           972        148        4
 4 05    Arkansas                       23789           709        165        5
 5 06    California                     29454          1358        109        3
 6 08    Colorado                       32401          1125        109        5
 7 09    Connecticut                    35326          1123        195        5
 8 10    Delaware                       31560          1076        247       10
 9 11    District of Columbia           43198          1424        681       17
10 12    Florida                        25952          1077         70        3
# ℹ 42 more rows

Başka dikkat edilecek bir husus ise, değişken isminin önce variable değişkeninden gelmesi ve sonrasında değer ile ilgli kısımdan gelerek birleştirilmesidir. Örneğin "estimate.income" isminin noktadan önceki kısmı variable değişkeninden, sonraki kısmı ise income değişken isminden gelmektedir. Arzu edilirse bu durumun tersi de yapılabilir.

us_rent_income |> 
  pivot_wider(
    names_from = variable,
    names_glue = "{variable}_{.value}",
    values_from = c(estimate, moe)
  )
# A tibble: 52 × 6
   GEOID NAME                 income_estimate rent_estimate income_moe rent_moe
   <chr> <chr>                          <dbl>         <dbl>      <dbl>    <dbl>
 1 01    Alabama                        24476           747        136        3
 2 02    Alaska                         32940          1200        508       13
 3 04    Arizona                        27517           972        148        4
 4 05    Arkansas                       23789           709        165        5
 5 06    California                     29454          1358        109        3
 6 08    Colorado                       32401          1125        109        5
 7 09    Connecticut                    35326          1123        195        5
 8 10    Delaware                       31560          1076        247       10
 9 11    District of Columbia           43198          1424        681       17
10 12    Florida                        25952          1077         70        3
# ℹ 42 more rows

names_glue parametresi, sütun adlarını oluşturmak için bir şablon sağlar. {variable}_{.value} ifadesi, yeni oluşturulan sütunların adlarını belirler. {variable} değişkenin adını, .value ise genişletilen değerlerin adını temsil eder. Örneğin, income_estimate, income_moe, rent_estimate ve rent_moe sütunlarına denk gelir.

Yapacağımız diğer bir örnek ise veri setinde olmayan bir durum olduğunda boş gelebilecek gözlemlere ne işlem yapılacağıdır. Örneğin veri setinin ilk satırındaki Alabama eyaletine ilişkin income verilerinin hiç olmadığını varsayalım.

library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
us_rent_income |> 
  slice(-1) # ilk gözlem haricindeki satırlar seçilir
# A tibble: 103 × 5
   GEOID NAME       variable estimate   moe
   <chr> <chr>      <chr>       <dbl> <dbl>
 1 01    Alabama    rent          747     3
 2 02    Alaska     income      32940   508
 3 02    Alaska     rent         1200    13
 4 04    Arizona    income      27517   148
 5 04    Arizona    rent          972     4
 6 05    Arkansas   income      23789   165
 7 05    Arkansas   rent          709     5
 8 06    California income      29454   109
 9 06    California rent         1358     3
10 08    Colorado   income      32401   109
# ℹ 93 more rows

Bu durumda veri setinin geniş formata dönüştürmek istersek income değişkenleri kayıp gözlem yani NA olarak değerlendirilir.

us_rent_income |> 
  slice(-1) |> 
  pivot_wider(
    names_from = variable,
    values_from = c(estimate,moe),
    
  )
# A tibble: 52 × 6
   GEOID NAME                 estimate_rent estimate_income moe_rent moe_income
   <chr> <chr>                        <dbl>           <dbl>    <dbl>      <dbl>
 1 01    Alabama                        747              NA        3         NA
 2 02    Alaska                        1200           32940       13        508
 3 04    Arizona                        972           27517        4        148
 4 05    Arkansas                       709           23789        5        165
 5 06    California                    1358           29454        3        109
 6 08    Colorado                      1125           32401        5        109
 7 09    Connecticut                   1123           35326        5        195
 8 10    Delaware                      1076           31560       10        247
 9 11    District of Columbia          1424           43198       17        681
10 12    Florida                       1077           25952        3         70
# ℹ 42 more rows

Eğer bu şekilde oluşan gözlemlere değer atamak istersek values_fill argümanını kullanabiliriz. Örneğin bu şekilde oluşan bir durumda NA değerlere 0 değerini atanmasını varsayalım. Aşağıki kod ile bunu gerçekleştirebiliriz.

us_rent_income |> 
  slice(-1) |> 
  pivot_wider(
    names_from = variable,
    values_from = c(estimate,moe),
    values_fill = 0
  )
# A tibble: 52 × 6
   GEOID NAME                 estimate_rent estimate_income moe_rent moe_income
   <chr> <chr>                        <dbl>           <dbl>    <dbl>      <dbl>
 1 01    Alabama                        747               0        3          0
 2 02    Alaska                        1200           32940       13        508
 3 04    Arizona                        972           27517        4        148
 4 05    Arkansas                       709           23789        5        165
 5 06    California                    1358           29454        3        109
 6 08    Colorado                      1125           32401        5        109
 7 09    Connecticut                   1123           35326        5        195
 8 10    Delaware                      1076           31560       10        247
 9 11    District of Columbia          1424           43198       17        681
10 12    Florida                       1077           25952        3         70
# ℹ 42 more rows
Dikkat

Orijinal veri setindeki eksik değerlerin zaten NA olduğu durumda values_fill kullanmak işe yaramaz. Çünkü mevcut durumda zaten veri setinde NA gözlem bulunmaktadır. values_fill dönüşüm sonrası oluşabilecek NA gözlemler için kullanılır.

Bu nedenle, values_fill parametresi yerine R içerisinde farklı opsiyonlar ile tüm NA değerlerini doldurmak daha uygun olacaktır. Yani, boş hücrelerin tümünü 0 ile doldurmak için values_fill parametresi kullanılmaz.

Değişken Birleştirme - unite

Belirli sütunlardaki değerleri birleştirerek yeni bir sütun oluşturmak için kullanılır. Genellikle, ayrı sütunlarda bulunan bilgileri birleştirerek yeni bir kategorik değişken oluşturmak için kullanılır.

  • Kullanım Alanları:

    • Birden fazla sütundaki bilgileri tek bir değişkende birleştirme.

    • Tarih ve saat gibi bilgileri tek bir sütunda birleştirme.

unite(data, col, ..., sep = "_", remove = TRUE)
  • data: İşlem yapılacak olan veri seti.

  • col: Birleştirilen sütunun adı.

  • ...: Birleştirilecek olan sütunların adları.

  • sep: Birleştirme işlemi sırasında kullanılacak ayırıcı karakter.

  • remove: Orijinal sütunları kaldırma veya koruma seçeneği.

adresler <- tibble(
  sokak = c("Örnek Sokak", "Şehitler Caddesi", "Atatürk Bulvarı"),
  mahalle = c("Merkez", "Güneşli", "Bahçelievler"),
  ilce = c("Çankaya", "Bağcılar", "Üsküdar"),
  sehir = c("Ankara", "İstanbul", "İstanbul"),
  posta_kodu = c("06000", "34100", "34662")
)

adresler
# A tibble: 3 × 5
  sokak            mahalle      ilce     sehir    posta_kodu
  <chr>            <chr>        <chr>    <chr>    <chr>     
1 Örnek Sokak      Merkez       Çankaya  Ankara   06000     
2 Şehitler Caddesi Güneşli      Bağcılar İstanbul 34100     
3 Atatürk Bulvarı  Bahçelievler Üsküdar  İstanbul 34662     
adresler_unite <- adresler %>%
  unite(adres, sokak, mahalle, ilce, sehir, posta_kodu, sep = ", ")

adresler_unite
# A tibble: 3 × 1
  adres                                                  
  <chr>                                                  
1 Örnek Sokak, Merkez, Çankaya, Ankara, 06000            
2 Şehitler Caddesi, Güneşli, Bağcılar, İstanbul, 34100   
3 Atatürk Bulvarı, Bahçelievler, Üsküdar, İstanbul, 34662

Bu kod, adres bileşenlerini her birinin arasına "," koyarak birleştirir ve “adres” sütununu oluşturur. Varsayılan olarak, remove = TRUE olduğundan, unite() fonksiyonu, birleştirilen sütunları oluşturduktan sonra orijinal sütunları kaldırır. Eğer remove = FALSE olarak ayarlanırsa, unite() fonksiyonu, birleştirilen sütunları oluştururken orijinal sütunları kaldırmaz. Bu durumda, hem birleştirilen sütunlar hem de orijinal sütunlar veri setinde kalır.

Değişken Bölme- separate

Bir sütundaki değerleri belirli bir ayırıcıya göre parçalayarak yeni sütunlar oluşturmak için kullanılır. Genellikle, tek bir sütunda bulunan bilgileri ayrı ayrı sütunlara bölmek için kullanılır.

  • Kullanım Alanları:

    • Tek bir sütundaki bilgileri ayrı ayrı sütunlara bölmek.

    • Tarih, saat veya adres gibi bilgileri ayrı sütunlara bölmek.

separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert = FALSE, extra = "warn", fill = "warn")
  • data: İşlem yapılacak olan veri seti.

  • col: Parçalanacak olan sütunun adı.

  • into: Oluşturulacak yeni sütunların adları.

  • sep: Parçalama işlemi sırasında kullanılacak ayırıcı karakter.

  • Diğer argümanlar, isteğe bağlı olarak sütunların türünün dönüştürülmesi ve eksik değerlerin doldurulması için kullanılır.

separate(adresler_unite, adres, into = c("sokak", "mahalle","ilce","sehir","posta_kodu"), sep = ",")
# A tibble: 3 × 5
  sokak            mahalle         ilce        sehir       posta_kodu
  <chr>            <chr>           <chr>       <chr>       <chr>     
1 Örnek Sokak      " Merkez"       " Çankaya"  " Ankara"   " 06000"  
2 Şehitler Caddesi " Güneşli"      " Bağcılar" " İstanbul" " 34100"  
3 Atatürk Bulvarı  " Bahçelievler" " Üsküdar"  " İstanbul" " 34662"  

Önceki bölümde oluşturduğumuz birleşik adres sütunu, bu kod ile bileşenlerine ayrıştırılmaktadır.