pivot_longer() ile Genişten Uzuna
Analiz için geniş biçimli tabloları düzenli uzun biçime dönüştürün.
pivot_longer() ile Genişten Uzuna, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
Geniş ve Uzun Veri Biçimleri
Veriler geniş biçimde (konu başına bir satır, birden çok değer sütunu) veya uzun biçimde (gözlem başına bir satır, değişken adı için bir sütun ve değer için başka bir sütun) saklanabilir. Görselleştirme ve modelleme için kullanılan birçok R paketi uzun biçimi bekler.
library(tidyr)
library(dplyr)
# Wide format: each quarter is a column
wide_df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, 90, 78),
q2 = c(88, 85, 80),
q3 = c(92, 88, 84)
)
print(wide_df)
cat('\nShape:', nrow(wide_df), 'rows x', ncol(wide_df), 'cols')pivot_longer() Temelleri
pivot_longer(df, cols, names_to, values_to), geniş biçimi uzun biçime dönüştürür. cols, dönüştürülecek sütunları belirtir; names_to, eski sütun adları için oluşturulan yeni sütundur; values_to ise değerler için oluşturulan yeni sütundur.
library(tidyr)
wide_df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, 90, 78),
q2 = c(88, 85, 80),
q3 = c(92, 88, 84)
)
long_df <- pivot_longer(
wide_df,
cols = c(q1, q2, q3),
names_to = 'quarter',
values_to = 'score'
)
print(long_df)starts_with() ile Sütun Seçme
Sütunları açıkça listelemek yerine cols içinde tidyselect yardımcılarını kullanın. starts_with('prefix'), ends_with('suffix') ve contains('string'), tutarlı adlandırılmış sütunları dönüştürürken özellikle kullanışlıdır.
library(tidyr)
df <- data.frame(
id = 1:3,
sales_jan = c(100, 200, 150),
sales_feb = c(120, 180, 160),
sales_mar = c(130, 190, 170)
)
# Select all sales_ columns automatically
pivot_longer(
df,
cols = starts_with('sales_'),
names_to = 'month',
values_to = 'sales'
)-col ile Sütunları Dışarıda Bırakma
Başka bir yaklaşım olarak, dönüştürme işleminden hariç tutulacak sütunları -col_name kullanarak belirtin. Geri kalan her şey dönüştürülür. Yalnızca bir veya iki ID sütununuz ve çok sayıda değer sütununuz olduğunda kullanışlıdır.
library(tidyr)
df <- data.frame(
region = c('East','West'),
jan = c(100, 200),
feb = c(110, 210),
mar = c(120, 220),
apr = c(130, 230)
)
# Pivot everything except 'region'
pivot_longer(df, cols = -region, names_to = 'month', values_to = 'revenue')names_prefix — Ön Ekleri Kaldırma
Sütun adlarında score_q1 ve score_q2 gibi bir ön ek olduğunda names_prefix bağımsız değişkeni, bu ön eki elde edilen names_to sütunundan kaldırır. Böylece tanımlayıcı temiz kalır.
library(tidyr)
df <- data.frame(
id = 1:3,
score_q1 = c(85, 90, 78),
score_q2 = c(88, 85, 80),
score_q3 = c(92, 88, 84)
)
pivot_longer(
df,
cols = starts_with('score_'),
names_to = 'quarter',
names_prefix = 'score_',
values_to = 'score'
)Birden Çok Sütun Kümesini Dönüştürme
Birden çok değer sütunu grubunuz olduğunda (örneğin hem sales_q1 hem de cost_q1), sütun adlarını parçalara ayırmak için birden çok değer içeren names_to ile names_pattern kullanın.
library(tidyr)
df <- data.frame(
id = 1:2,
sales_q1 = c(100, 200),
sales_q2 = c(110, 210),
cost_q1 = c(60, 110),
cost_q2 = c(65, 115)
)
pivot_longer(
df,
cols = -id,
names_to = c('.value', 'quarter'),
names_pattern = '(.+)_(q[0-9]+)'
)names_transform — Türleri Dönüştürme
Varsayılan olarak yeni adlar sütunu karakter türündedir. Adlar sütununu otomatik olarak farklı bir türe dönüştürmek için names_transform kullanın (örneğin y2020 ve y2021 gibi sütun adlarından tamsayı türünde yıl elde etmek için).
library(tidyr)
df <- data.frame(
product = c('A','B'),
y2021 = c(100, 200),
y2022 = c(110, 210),
y2023 = c(120, 220)
)
result <- pivot_longer(
df,
cols = -product,
names_to = 'year',
names_prefix = 'y',
names_transform = list(year = as.integer),
values_to = 'sales'
)
print(result)
cat('year column type:', class(result$year))values_drop_na — Eksik Değerleri Kaldırma
Geniş biçimde bazı sütun-satır birleşimleri için eksik değerler olduğunda, bunlar uzun biçimde NA olarak görünür. Değerin NA olduğu satırları otomatik olarak kaldırmak için values_drop_na = TRUE ayarını yapın.
library(tidyr)
df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, NA, 78),
q2 = c(88, 85, NA),
q3 = c(NA, 88, 84)
)
# Without drop: 9 rows including NAs
pivot_longer(df, -student, names_to='quarter', values_to='score',
values_drop_na = TRUE)Uzun Biçim ggplot2'yi Mümkün Kılar
Uzun biçime dönüştürmenin en önemli nedeni şudur: ggplot2, görsel özellikleri sütunlardan eşler. Tüm değerler bir sütunda, kategorileri ise başka bir sütunda olduğunda color = quarter veya facet_wrap(~quarter) ifadelerini zahmetsizce kullanabilirsiniz.
library(tidyr)
# (ggplot2 not run here, but showing the data preparation)
df <- data.frame(
month = c('Jan','Feb','Mar'),
product_A = c(100, 120, 110),
product_B = c(200, 190, 210)
)
# After pivoting, ready for ggplot2:
long_df <- pivot_longer(df, -month, names_to='product', values_to='sales')
print(long_df)
# ggplot(long_df, aes(x=month, y=sales, color=product)) + geom_line()Sayısal Sütun Adlarıyla Dönüştürme
Bazen sütun adları yalnızca sayılardan oluşur (örneğin yıllar: 2020, 2021). R'de sayısal sütun adları veri çerçevelerinde tırnak içine alınır. Bunları ele almak için num_range('', 2020:2023) veya cols bağımsız değişkeninde ters tırnakla alıntılamayı kullanın.
library(tidyr)
# Year columns as numbers (common in census-style data)
df <- data.frame(
country = c('US','UK'),
'2021' = c(100, 80),
'2022' = c(110, 85),
'2023' = c(120, 90),
check.names = FALSE
)
pivot_longer(
df,
cols = c('2021','2022','2023'),
names_to = 'year',
values_to = 'gdp_index'
)Dönüştürme Sonuçlarını Karşılaştırma
Dönüştürme işleminden sonra sonucunuzu doğrulayın: satır sayısı nrow(wide) * n_pivoted_cols olmalı ve names_to sütunundaki benzersiz değerler, kaldırılmışsa ön ek çıkarılmış hâliyle, özgün sütun adlarınızla eşleşmelidir.
library(tidyr)
wide <- data.frame(
id = 1:4,
jan = c(10,20,30,40),
feb = c(11,21,31,41),
mar = c(12,22,32,42)
)
long <- pivot_longer(wide, -id, names_to='month', values_to='value')
cat('Wide rows:', nrow(wide), '\n')
cat('Long rows:', nrow(long), '(expected', nrow(wide)*3, ')\n')
cat('Months:', paste(unique(long$month), collapse=', '), '\n')Hızlı Kontrol
pivot_longer() içindeki names_prefix bağımsız değişkeni ne yapar?
Özet: pivot_longer()
Geniş biçimden uzun biçime dönüştürme için temel noktalar:
pivot_longer(df, cols, names_to, values_to)temel işlevdircols, tidyselect ifadelerini kabul eder:starts_with(),-id_col,c('a','b')names_prefix, sütun adlarının başındaki bir dizeyi kaldırırnames_transform, adlar sütununun türünü dönüştürür (örneğin tamsayıya)values_drop_na = TRUE, NA içeren satırları otomatik olarak kaldırır- Uzun biçim; ggplot2, çoğu modelleme işlevi ve istatistiksel testler tarafından gereklidir
- Doğrulayın: uzun biçimdeki satır sayısı = geniş biçimdeki satır sayısı × dönüştürülen sütun sayısı
library(tidyr)
df <- data.frame(
team = c('Alpha','Beta'),
sales_2022 = c(100, 200),
sales_2023 = c(120, 220),
sales_2024 = c(140, 240)
)
pivot_longer(
df,
cols = starts_with('sales_'),
names_to = 'year',
names_prefix = 'sales_',
names_transform = list(year = as.integer),
values_to = 'revenue'
)Sıkça Sorulan Sorular
“pivot_longer() ile Genişten Uzuna” dersi ücretsiz mi?
Evet — “pivot_longer() ile Genişten Uzuna” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“pivot_longer() ile Genişten Uzuna” dersinde ne öğreneceğim?
Analiz için geniş biçimli tabloları düzenli uzun biçime dönüştürün. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“pivot_longer() ile Genişten Uzuna” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- pivot_longer() ile Genişten Uzuna
- pivot_wider() ile Uzundan Genişe
- Dize Sütunları için separate() ve unite()
- Veri Çerçevelerini İç İçe Alma ve Çözme