pivot_wider() ile Uzundan Genişe
Anahtar-değer çiftlerini geniş biçimli tablolara geri yayın.
pivot_wider() ile Uzundan Genişe, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. 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.
Ne Zaman Geniş Biçime Geçilmeli
Uzun biçim analiz için uygun olsa da geniş biçim raporlar, elektronik tablolar ve belirli algoritmalar (örneğin korelasyon matrisleri) için çoğu zaman gereklidir. pivot_wider(), pivot_longer() işlevinin tersidir — bir sütundaki değerleri birden çok yeni sütuna dağıtır.
library(tidyr)
# Long format: one row per student-quarter combination
long_df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
score = c(85, 88, 92, 90, 85, 88)
)
print(long_df)
cat('\n', nrow(long_df), 'rows x', ncol(long_df), 'cols')pivot_wider() Temelleri
pivot_wider(df, names_from, values_from), uzun biçimi geniş biçime dönüştürür. names_from, değerleri yeni sütun adlarına dönüşen sütunu belirtir; values_from ise değerleri bu yeni sütunları dolduran sütunu belirtir.
library(tidyr)
long_df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
score = c(85, 88, 92, 90, 85, 88)
)
wide_df <- pivot_wider(
long_df,
names_from = quarter,
values_from = score
)
print(wide_df)id_cols — Satır Anahtarlarını Belirleme
id_cols, geniş çıktıdaki her satırı benzersiz olarak tanımlayan sütunları belirtir. Varsayılan olarak dplyr, names_from veya values_from içinde belirtilmeyen tüm sütunları kullanır. Bu ayarı açıkça yapmak, beklenmeyen gruplandırmayı önler.
library(tidyr)
df <- data.frame(
year = c(2023,2023,2024,2024),
region = c('East','West','East','West'),
quarter = c('Q1','Q1','Q1','Q1'),
revenue = c(100, 200, 120, 220)
)
pivot_wider(
df,
id_cols = c(year, quarter),
names_from = region,
values_from = revenue
)values_fill — Eksik Birleşimleri Ele Alma
id_cols ve names_from sütunlarının bazı birleşimleri mevcut olmadığında, oluşan hücre NA olur. Bu eksik değerleri varsayılan bir değerle (örneğin sayımlar veya toplamlar için 0) değiştirmek üzere values_fill kullanın.
library(tidyr)
df <- data.frame(
product = c('A','A','B'),
channel = c('online','store','online'),
sales = c(100, 150, 200)
)
# 'B' has no 'store' data — fill with 0
pivot_wider(
df,
names_from = channel,
values_from = sales,
values_fill = 0
)names_prefix — Ön Ek Ekleme
Yeni sütun adlarının tümünün önüne bir dize eklemek için names_prefix kullanın. Bu, names_from içindeki değerler sayı olduğunda veya sütun adlarını daha açıklayıcı hâle getirmek istediğinizde oluşabilecek sorunları önler.
library(tidyr)
df <- data.frame(
student = c('Alice','Alice','Bob','Bob'),
quarter = c(1, 2, 1, 2),
score = c(85, 90, 78, 82)
)
# Without prefix: columns named '1' and '2' (problematic)
# With prefix: q1, q2
pivot_wider(
df,
names_from = quarter,
values_from = score,
names_prefix = 'q'
)Birden Çok values_from Sütunu
values_from öğesine bir vektör geçirerek birden çok değer sütununu aynı anda geniş biçime dönüştürebilirsiniz. Oluşan sütunlar, değer sütununun adı ile kategorinin birleştirilmesiyle value_name biçiminde adlandırılır.
library(tidyr)
df <- data.frame(
region = c('East','East','West','West'),
period = c('Q1','Q2','Q1','Q2'),
revenue = c(100, 120, 200, 210),
units = c(10, 12, 20, 22)
)
pivot_wider(
df,
names_from = period,
values_from = c(revenue, units)
)values_fn ile Yinelenenleri Ele Alma
Aynı id + name birleşimi için birden çok değer varsa, pivot_wider hangisini kullanacağını bilemez ve bir uyarıyla liste sütunu döndürür. Bir toplulaştırma işlevi belirterek bu durumu çözmek için values_fn kullanın.
library(tidyr)
# Duplicate rows: Alice has two Q1 scores
df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob'),
quarter = c('Q1','Q1','Q2','Q1','Q2'),
score = c(85, 87, 90, 78, 82)
)
# Resolve duplicates by taking the mean
pivot_wider(
df,
names_from = quarter,
values_from = score,
values_fn = mean
)Adlandırılmış Listeyle values_fn
Farklı değer sütunlarına farklı toplulaştırma işlevlerini aynı anda uygulamak için values_fn öğesine adlandırılmış bir liste geçirin. Bu yöntem, farklı özetleme yöntemleri gerektiren birden çok değer sütununu geniş biçime dönüştürürken oldukça kullanışlıdır.
library(tidyr)
df <- data.frame(
region = c('East','East','West','West'),
period = c('Q1','Q1','Q1','Q1'),
revenue = c(100, 120, 200, 210),
orders = c(10, 12, 20, 22)
)
pivot_wider(
df,
names_from = period,
values_from = c(revenue, orders),
values_fn = list(revenue = sum, orders = sum)
)Çapraz Tablolar Oluşturma
Bir veri çerçevesi biçiminde çapraz tablo (olumsallık tablosu), dplyr::count() ile sayım yaptıktan sonra pivot_wider() kullanılarak kolayca oluşturulabilir. Bu işlem, sıklık analizi için her iki paketin gücünü birleştirir.
library(tidyr)
library(dplyr)
survey <- data.frame(
dept = c('HR','HR','Eng','Eng','HR','Eng'),
response = c('Yes','No','Yes','Yes','Yes','No')
)
survey %>%
count(dept, response) %>%
pivot_wider(
names_from = response,
values_from = n,
values_fill = 0
)Gidiş-Dönüş: Uzun → Geniş → Uzun
pivot_longer() ile pivot_wider() arasındaki ters ilişkiyi anlamak, hataları yakalamanıza yardımcı olur. Bir gidiş-dönüş işlemi (uzun→geniş→uzun), satır sırası ve tür dönüşümleri dışında özgün veriyi döndürmelidir.
library(tidyr)
original_long <- data.frame(
id = c(1,1,2,2),
key = c('a','b','a','b'),
value = c(10, 20, 30, 40)
)
# Go wide
wide <- pivot_wider(original_long, names_from=key, values_from=value)
print(wide)
# Go long again
pivot_longer(wide, -id, names_to='key', values_to='value')Uygulama: Puan Raporu
Yaygın bir kullanım örneği şudur: sınav puanlarından oluşan uzun bir tabloyu, öğrenci ve ders bazında bir rapor tablosuna dönüştürmek. Temiz ve sunuma hazır bir çıktı üretmek için bunu dplyr::arrange() ve rename() ile birleştirin.
library(tidyr)
library(dplyr)
scores <- data.frame(
student = c('Alice','Alice','Bob','Bob','Carol','Carol'),
subject = c('Math','Science','Math','Science','Math','Science'),
score = c(92, 88, 85, 91, 79, 83)
)
scores %>%
pivot_wider(names_from=subject, values_from=score) %>%
mutate(average = round((Math + Science) / 2, 1)) %>%
arrange(desc(average))Kısa Kontrol
Aynı id + name birleşimi için birden çok değer varken pivot_wider() çağırdığınızda ne olur?
Özet: pivot_wider()
Uzundan genişe dönüştürme için temel çıkarımlar:
pivot_wider(names_from, values_from), bir anahtar sütununu birden çok yeni sütuna dağıtırid_cols, her satırı tanımlayan sütunları belirtirvalues_fill = 0(veya herhangi bir skaler değer), eksik birleşimleri doldururnames_prefix, sayısal veya belirsiz sütun adlarını önlemek için bir dizenin önüne eklenmesini sağlarvalues_fn, yinelenen hücre değerlerini bir toplulaştırma işleviyle çözer- Birden çok değer sütununu aynı anda dönüştürmek için
values_fromöğesine bir vektör geçirin - Çapraz tabloları verimli biçimde oluşturmak için
count()sonrasında kullanın
library(tidyr)
library(dplyr)
data.frame(
region = c('East','East','West','West'),
metric = c('revenue','units','revenue','units'),
value = c(100, 10, 200, 20)
) %>%
pivot_wider(
names_from = metric,
values_from = value,
values_fill = 0
) %>%
mutate(revenue_per_unit = revenue / units)Sıkça Sorulan Sorular
“pivot_wider() ile Uzundan Genişe” dersi ücretsiz mi?
Evet — “pivot_wider() ile Uzundan Genişe” 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_wider() ile Uzundan Genişe” dersinde ne öğreneceğim?
Anahtar-değer çiftlerini geniş biçimli tablolara geri yayı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 2. dersidir.
“pivot_wider() ile Uzundan Genişe” 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