pivot_longer(data, cols, names_to, values_to, names_prefix = NULL, names_sep = "_", names_pattern = NULL, ...)
Veri Dönüştürme
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:
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
vepivot_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.İçerik Dönüşümleri: Bu tür dönüşümler, veri setindeki değerlerin içeriğini değiştirir. Örneğin,
unite
veseparate
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.
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 |>
billboard_long 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
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.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.cols = starts_with("wk")
:pivot_longer
fonksiyonunun ilk argümanı olancols
, 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.names_to = "week"
:pivot_longer
fonksiyonunun ikinci argümanı olannames_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.values_to = "rank"
:pivot_longer
fonksiyonunun üçüncü argümanı olanvalues_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.values_drop_na = TRUE
: Bu parametre, dönüştürülen sütunlardakiNA
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.
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 |>
billboard_long_with_na 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.
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.
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.names_transform = as.integer
: Bu argüman, sütun adlarından sayısal değerleri almak içinas.integer
fonksiyonunu kullanır. Önceki örnekte olduğu gibi, sütun adlarından sayıları alırken bu seferas.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.
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.
NAME: Bu değişken, eyaletin veya coğrafi bölgenin adını içerir.
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).
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.
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. Buradavariable
değişkeni kullanılarak genişletilecek sütunlar belirlenir. Bu durumda,variable
değişkenindeki değerler (income
verent
) 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
vemoe
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
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.
<- tibble(
adresler 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 %>%
adresler_unite 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.