Menu

R'da dplyr: filter, select, mutate, summarize — Pratik Bir Giriş

dplyr nedir, nasıl kurulur ve altı temel fiili ile pipe operatörü, karmaşık veri çerçevesi kodunu nasıl okunabilir işlem hatlarına dönüştürür.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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() ve n() 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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA