dplyr Nedir
dplyr, R'ın veri işleme için en popüler paketidir - bir avuç fiilden oluşan bir "veri grameri". Her fiil, bir veri çerçevesi alan, tam olarak tek bir iş yapan (bazı satırları tutmak, bir sütun eklemek, grup özeti hesaplamak) ve yeni bir veri çerçevesi döndüren bir fonksiyondur. Her fiil aynı şekle sahip olduğu için - veri çerçevesi girer, veri çerçevesi çıkar - pipe ile birbirine eklenerek yukarıdan aşağıya bir tarif gibi okunan işlem hatları oluştururlar. dplyr, bu tasarımı paylaşan bir paket ailesi olan tidyverse'ün (tidyr, ggplot2, readr) çekirdeğidir.
dplyr'ın yaptığı her şeyi temel R da yapar. İşte saf temel R ile küçük bir analiz - yerleşik mtcars verisini 6 silindirli arabalara filtreleyin, yeni bir sütun hesaplayın ve vites sayısına göre ortalamasını alın. Bu kod çalışır:
Bu çalışır ve iyi bir R kodudur. Ancak hikayenin köşeli parantez indeksleme, bir $ ataması ve bir formül arasında nasıl dağıldığına dikkat edin. Aynı analizin dplyr versiyonu:
library(dplyr)
mtcars |>
filter(cyl == 4) |>
mutate(kml = mpg * 0.425) |>
group_by(gear) |>
summarize(avg_kml = round(mean(kml), 1))
Dört fiil, tam da sesli anlatacağınız sırada. Bu okunabilirlik, satış konuşmasının tamamıdır ve yirmi adımlık bir işlem hattında belirleyicidir.
Bu sayfadaki dplyr kod parçaları statiktir çünkü bu editör yalnızca temel R çalıştırır - bunları çalıştırmak için dplyr'ı bir sonraki bölümde gösterildiği gibi kendi makinenize kurun.
Kurulum ve Yükleme
Tek seferlik kurulum, ardından onu kullanan her betikte yükleyin:
install.packages("dplyr") # once, per machine
library(dplyr) # every script
Bunun yerine install.packages("tidyverse") çalıştırmak dplyr'ı ve kardeşlerini birlikte getirir. dplyr yüklendiğinde stats::filter ve stats::lag fonksiyonlarını maskelediği konusunda uyarır - bu normaldir, bir hata değildir.
Altı Temel Fiil
Her fiil, veri çerçevesini ilk argümanı olarak alır ve sütun adlarını çıplak halde, tırnak işareti veya df$ öneki olmadan kabul eder.
filter() bir koşula uyan satırları tutar:
mtcars |> filter(mpg > 25)
mtcars |> filter(cyl == 4, hp < 70) # comma = AND
select() sütunları tutar - ada, aralığa veya yardımcı fonksiyona göre:
mtcars |> select(mpg, cyl, hp)
mtcars |> select(mpg:hp) # a range of adjacent columns
mtcars |> select(starts_with("d")) # disp, drat
mutate() sütun ekler veya dönüştürür:
mtcars |> mutate(kml = mpg * 0.425, heavy = wt > 3.5)
arrange() satırları sıralar - azalan sıralama için sütunu desc() ile sarın:
mtcars |> arrange(desc(mpg))
summarize() satırları tek bir özet satırına indirger ve group_by() bunu grup başına yapmasını sağlar:
mtcars |>
group_by(cyl) |>
summarize(n = n(), avg_mpg = mean(mpg))
group_by() tek başına görünür bir şey yapmaz - yalnızca veri çerçevesini etiketler, böylece bir sonraki summarize() (veya mutate()) grup grup çalışır. Her fiilin bu bölümde tam bir dokümanı var: satırları filtreleme, sütun ekleme, sıralama ve gruplu özetler.
Fiilleri Pipe ile Zincirleme
Pipe |>, kendisinden önceki değeri alır ve kendisinden sonraki fonksiyona ilk argüman olarak besler - x |> f(y), f(x, y) demektir. Her dplyr fiili bir veri çerçevesi alıp döndürdüğü için, fiiller sınırsızca zincirlenir:
mtcars |>
filter(hp > 100) |>
mutate(kml = mpg * 0.425) |>
group_by(cyl) |>
summarize(cars = n(), avg_kml = round(mean(kml), 1)) |>
arrange(desc(avg_kml))
Sesli okuyun: mtcars'ı al, 100 beygirin üzerindeki arabaları tut, km/litre sütunu ekle, silindire göre grupla, her grubu say ve ortalamasını al, ortalamaya göre sırala. Ara değişken yok, iç içe geçme yok. Eski kodlar |> yerine magrittr paketinden %>% kullanır - dplyr işlerinde birbirinin yerine geçebilirler ve |> (R 4.1+ içinde yerleşik) pipe dokümanında ele alınmaktadır.
count() ve n(): Sayma Yardımcıları
Saymak o kadar yaygın ki dplyr'ın bunun için kısayolları var. n(), geçerli gruptaki satır sayısını verir (yalnızca summarize() veya mutate() içinde geçerlidir) ve count(), tüm group_by() + summarize(n = n()) dansını tek bir çağrıya indirger:
mtcars |> count(cyl) # rows per cyl value
mtcars |> count(cyl, gear, sort = TRUE) # two groupers, biggest first
Kendinizi group_by(x) |> summarize(n = n()) yazarken bulursanız, onu count(x) ile değiştirin.
Tibble Üzerine Bir Not
dplyr fiilleri genellikle bir tibble döndürür - tidyverse'ün veri çerçevesi varyantı. Tibble bir veri çerçevesidir (veri çerçevesi kabul eden her şey tibble da kabul eder), ama daha dostça yazdırılır: yalnızca ilk 10 satır, yalnızca sığan sütunlar ve her adın altında türü gösterilir. Bilmeye değer iki fark: tibble'lar asla satır adı kullanmaz (bu yüzden mtcars |> as_tibble() araba adlarını kaybeder - tidyverse, tanımlayıcıların gerçek bir sütunda yaşamasını bekler) ve tek köşeli parantezle indeksleme her zaman bir tibble döndürür, bazen vektöre düşmez. İkisi de günlük kullanımda sizi şaşırtmamalı; str() size tbl_df dediğinde panik yapmayın yeter.
Öğrendikleriniz
- dplyr bir gramerdir: her biri veri çerçevesine tek bir iş yapan, pipe ile zincirlenen altı fiil.
filter()satırları seçer,select()sütunları seçer,mutate()sütun ekler,arrange()sıralar,group_by() + summarize()toplulaştırır.x |> f(y),f(x, y)demektir - işlem hatları, işlerin gerçekleştiği sırada yukarıdan aşağıya okunur.count()ven()sayma ihtiyaçlarının çoğunu karşılar.- Temel R bunların hepsini yapabilir; işlem hatları büyüdükçe dplyr okunabilirlikte kazanır.
Sırada: filtreleme ve alt küme almanın derinlemesine incelenmesi - temel R'ın köşeli parantez deyimleri ve dplyr'ın filter() fonksiyonunun buradaki yeri.
Sıkça Sorulan Sorular
R'da dplyr nedir?
dplyr, veri çerçevelerini işlemek için R'da en yaygın kullanılan pakettir. Size küçük bir fiil kümesi sunar - filter(), select(), mutate(), arrange(), summarize(), group_by() - her biri veri çerçevesine tek bir iş yapar ve pipe ile zincirlenerek okunabilir işlem hatları oluşturur. tidyverse'ün bir parçasıdır.
dplyr'ı nasıl kurarım?
Bir kez install.packages("dplyr") çalıştırın, ardından onu kullanan her betiğin başına library(dplyr) ekleyin. Bunun yerine tidyverse kurmak size dplyr'ı ve kardeş paketlerini (tidyr, ggplot2, readr) tek seferde getirir.
dplyr'a ihtiyacım var mı, yoksa temel R yeterli mi?
dplyr'ın yaptığı her şeyi temel R da yapabilir - alt küme alma, aggregate(), order() - ve sıfır bağımlılıkla her yerde çalıştığı için bilmeye değer. dplyr, işlem hatları uzadığında kurulumunu hak eder: zincirlenmiş beş fiil bir cümle gibi okunurken, temel R eşdeğeri iç içe köşeli parantez bulmacaları gibi okunur.
dplyr'da summarize ile summarise arasındaki fark nedir?
Hiçbir fark yoktur. Aynı fonksiyonun ABD ve İngiltere yazımlarıdır; dplyr her ikisini de dışa aktarır. Ekibinizin kullandığını seçin ve tutarlı olun.