Veri Çerçevelerini İç İçe Alma ve Çözme
Düzenli iş akışlarında liste sütunlarıyla çalışmak için nest() ve unnest() kullanın.
Veri Çerçevelerini İç İçe Alma ve Çözme, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 4. 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.
Liste Sütunları ve İç İçe Veriler
Liste sütunu, her hücresinde bir R nesnesi (vektör, veri çerçevesi, model veya liste) bulunan veri çerçevesi sütunudur. Bu yapı, yapılandırılmış alt verilerin diğer sütunlarla birlikte saklanmasını ve grup bazlı güçlü iş akışlarının oluşturulmasını sağlar.
library(tidyr)
library(dplyr)
# A simple data frame with a list-column
df <- data.frame(
group = c('A','B','C'),
n = c(3, 2, 4)
)
df$values <- list(c(1,2,3), c(4,5), c(6,7,8,9))
print(df)
print(df$values[[1]]) # Access the first list elementnest() — İç İçe Veri Çerçeveleri Oluşturma
nest(df, data = c(col1, col2)), iç içe alınmayan sütunlara göre satırları gruplar ve belirtilen sütunları veri çerçevelerinden oluşan bir liste sütununda toplar. Her grup için bir satır oluşturulur ve her satırda küçük bir veri çerçevesi bulunur.
library(tidyr)
library(dplyr)
df <- data.frame(
region = c('East','East','East','West','West'),
month = c(1,2,3,1,2),
sales = c(100,120,110,200,190)
)
nested <- df %>%
nest(data = c(month, sales))
print(nested)
print(nested$data[[1]]) # East region's datagroup_by() ile nest()
En yaygın kalıp şudur: Her grup için bir satır oluşturmak ve kalan tüm sütunları bir data liste sütununda toplamak üzere önce group_by(), ardından nest() kullanın. Bu, yeni tidyr sürümlerindeki nest(.by = group_col) kullanımına denktir.
library(tidyr)
library(dplyr)
df <- data.frame(
category = c('A','A','A','B','B','C','C','C','C'),
x = c(1,2,3,4,5,6,7,8,9),
y = c(2,4,3,8,7,5,6,9,8)
)
nested <- df %>%
group_by(category) %>%
nest()
print(nested)
cat('Rows per category B:', nrow(nested$data[[2]]))İç İçe Veri Çerçeveleriyle map()
Veriler iç içe alındıktan sonra her küçük veri çerçevesine bir işlev uygulamak için purrr::map() kullanın. İşlev her seferinde bir veri çerçevesi alır ve sonuçlar yeni bir liste sütununa dönüşür; bu sonuç çoğu zaman kurulmuş bir modeldir.
library(tidyr)
library(dplyr)
library(purrr)
df <- data.frame(
group = c('A','A','A','B','B','B'),
x = c(1,2,3,1,2,3),
y = c(2.1,4.0,5.9,3.2,5.8,9.1)
)
models <- df %>%
group_by(group) %>%
nest() %>%
mutate(model = map(data, ~lm(y ~ x, data = .x)))
print(models)map() ile Model Sonuçlarını Çıkarma
Her grup için modeller kurduktan sonra, her modelden sonuçları çıkarmak için map() ile broom::tidy() veya coef() gibi işlevleri kullanın. Çıktı, daha sonra iç içe yapının açılabileceği başka bir liste sütunudur.
library(tidyr)
library(dplyr)
library(purrr)
df <- data.frame(
group = c('A','A','A','B','B','B'),
x = c(1,2,3,1,2,3),
y = c(2.1,4.0,5.9,3.2,5.8,9.1)
)
df %>%
group_by(group) %>%
nest() %>%
mutate(
model = map(data, ~lm(y ~ x, data = .x)),
r_squared = map_dbl(model, ~summary(.x)$r.squared),
intercept = map_dbl(model, ~coef(.x)[1]),
slope = map_dbl(model, ~coef(.x)[2])
) %>%
select(group, r_squared, intercept, slope)unnest() — Liste Sütunlarını Genişletme
unnest(df, cols = data), nest() işlevinin tersidir. Liste sütununu normal sütunlara geri genişletir ve gerektiğinde tanımlayıcı sütunları tekrarlar. İç içe yapısı açılacak liste sütununu belirtmek için cols kullanın.
library(tidyr)
library(dplyr)
nested <- data.frame(
region = c('East','West')
)
nested$data <- list(
data.frame(month=1:3, sales=c(100,120,110)),
data.frame(month=1:2, sales=c(200,190))
)
unnested <- unnest(nested, cols = data)
print(unnested)unnest_longer() — Listeyi Satırlara Genişletme
unnest_longer(df, col), listedeki her öğe bir satır olacak şekilde bir liste sütununu genişletir. Veri çerçeveleri bekleyen unnest() işlevinin aksine unnest_longer(), vektör veya skaler listeleriyle çalışır.
library(tidyr)
df <- data.frame(
person = c('Alice','Bob','Carol')
)
df$skills <- list(
c('R','Python','SQL'),
c('Excel','Tableau'),
c('R','Julia','Stan','BUGS')
)
unnest_longer(df, skills)unnest_wider() — Listeyi Sütunlara Genişletme
unnest_wider(df, col), her liste öğesini bir dizi yeni sütuna genişletir. Listenin adlandırılmış öğeleri olmalıdır; adlar sütun adlarına dönüşür. Bu işlev, iç içe JSON benzeri yapılar için kullanışlıdır.
library(tidyr)
df <- data.frame(id = 1:3)
df$info <- list(
list(name='Alice', age=30, city='NYC'),
list(name='Bob', age=25, city='LA'),
list(name='Carol', age=35, city='Chicago')
)
unnest_wider(df, info)Tam İç İçe İş Akışı Kalıbı
Tam iç içe veri çerçevesi iş akışı şöyledir: group_by() + nest() → map() ile işlevleri uygulama → sonuçları çıkarma → düz bir veri çerçevesi elde etmek için unnest(). Bu kalıp, herhangi bir analizin grup bazında çalıştırılmasını sağlar.
library(tidyr)
library(dplyr)
library(purrr)
df <- data.frame(
region = c('East','East','East','West','West','West'),
month = c(1,2,3,1,2,3),
revenue = c(100,120,115,200,195,210)
)
df %>%
group_by(region) %>%
nest() %>%
mutate(
mean_rev = map_dbl(data, ~mean(.x$revenue)),
trend = map_dbl(data, ~coef(lm(revenue~month, data=.x))[2])
) %>%
select(region, mean_rev, trend)Birden Çok Sütunu İç İçe Alma
Hangi sütunların iç içe veri çerçevesine alınacağını seçebilirsiniz. Bunları nest(data = c(...)) içinde açıkça belirtin. Belirtilmeyen sütunlar, liste sütunuyla birlikte dış veri çerçevesinde normal sütunlar olarak kalır.
library(tidyr)
library(dplyr)
df <- data.frame(
region = c('East','East','West','West'),
year = c(2023,2024,2023,2024),
q1 = c(100,110,200,210),
q2 = c(105,115,195,215),
target = c(105,112,198,212)
)
# Only nest quarterly data, keep target as outer column
nested <- df %>%
group_by(region, year) %>%
nest(quarters = c(q1, q2))
print(nested)İç İçe Veri Çerçeveleri Ne Zaman Kullanılmalı
İç içe veri çerçeveleri şu durumlarda özellikle etkilidir: gruplar genelinde aynı modeli kurmanız, grup bazında benzetimler çalıştırmanız, alt kümelere karmaşık dönüşümler uygulamanız veya JSON benzeri hiyerarşik verilerle çalışmanız. Grup düzeyindeki üst verilerle gruba özgü verileri düzenli biçimde bir arada tutarlar.
library(tidyr)
library(dplyr)
library(purrr)
# Bootstrap confidence interval per group
df <- data.frame(
group = c('A','A','A','A','B','B','B','B'),
value = c(10,12,11,13,20,22,19,21)
)
set.seed(42)
df %>%
group_by(group) %>%
nest() %>%
mutate(
boot_means = map(data, function(d) {
replicate(100, mean(sample(d$value, replace=TRUE)))
}),
ci_low = map_dbl(boot_means, ~quantile(.x, 0.025)),
ci_high = map_dbl(boot_means, ~quantile(.x, 0.975))
) %>%
select(group, ci_low, ci_high)Kısa Kontrol
Veri çerçevelerinden oluşan bir liste sütununu yeniden düz bir veri çerçevesine genişletmenin doğru yolu nedir?
Özet: İç İçe Alma ve Yapıyı Açma
İç içe veri çerçevesi iş akışları için temel çıkarımlar:
nest(data = c(cols))— sütunları, her grup için bir veri çerçevesi içeren liste sütununda toplargroup_by() + nest()— gruba göre iç içe alma için standart kalıptırmap(nested$data, fn)— her iç içe veri çerçevesine herhangi bir işlevi uygularunnest(cols = data)— veri çerçevelerinden oluşan liste sütununu yeniden düz biçime genişletirunnest_longer(col)— vektör veya skaler listesini satırlara genişletirunnest_wider(col)— adlandırılmış listeyi sütunlara genişletir- Grup bazında modelleme, önyükleme ve JSON verisi işleme için idealdir
library(tidyr)
library(dplyr)
library(purrr)
data.frame(
team = c('A','A','B','B'),
x = c(1,2,1,2),
y = c(2,4,3,6)
) %>%
group_by(team) %>%
nest() %>%
mutate(
model = map(data, ~lm(y ~ x, data = .x)),
slope = map_dbl(model, ~coef(.x)['x'])
) %>%
select(team, slope)Sıkça Sorulan Sorular
“Veri Çerçevelerini İç İçe Alma ve Çözme” dersi ücretsiz mi?
Evet — “Veri Çerçevelerini İç İçe Alma ve Çözme” 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.
“Veri Çerçevelerini İç İçe Alma ve Çözme” dersinde ne öğreneceğim?
Düzenli iş akışlarında liste sütunlarıyla çalışmak için nest() ve unnest() kullanı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 4. dersidir.
“Veri Çerçevelerini İç İçe Alma ve Çözme” 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