dplyr – selekcja atrybutów i aliasowanie

W ostatnim artykule przejrzeliśmy możliwości pakietu pakietu dplyr rozszerzającego możliwości języka R jeśli chodzi o szybkie rozpoznanie danych. Dziś chciałbym zaprezentować jedną z fundamentalnych funkcji wchodzących w skład tego pakietu – chodzi mianowicie o funkcję select. Entuzjaści języka TSQL mogą czuć się jak w domu ponieważ funkcja ta ma podobne znaczenie jak przy manipulacji danymi bazodanowymi. Tak więc zaczynajmy!

Pierwszym krokiem jest oczywiście załadowanie dwóch pakietów: dplyr oraz hflights oraz przypiszmy hflights do obiektu typu tbl_df o nazwie df :

library("hflights")
library("dplyr")
df<-tbl_df(hflights)

Teraz wprowadzimy podstawową składnię select – poniższe zapytanie pobiera z zestawu df kolumny Year, Month, DayOfYear oraz AirTime:

select(df,Year,Month,DayofMonth,AirTime)

Results

Pierwszym argumentem jest zestaw danych, a następnie po przecinku lista kolumn, które chcemy wyświetlić. Proste prawda? Szczególnie, że w bazowej implementacji R nie jest to aż tak proste. A to dopiero początek!

Oczywiście możemy układać kolumny w określonej kolejności.  Aby osiągnąć ten efekt można jawnie wskazać wszystkie kolumny w pożądanej przez nas kolejności, albo przedstawić na początek lub koniec daną kolumnę i po nich/przed nimi wyświetlić wszystkie pozostałe. Aby coś takiego osiągnąć możemy użyć funkcji everything() zwracającej wszystkie kolumny zestawu:

select(df,Month,Dest,everything())

Results

Składnia select pozwala nam wybierać kolumny, które zaczynają albo kończą się na określoną frazę – służą ku temu argumenty starts_with i ends_with np. poniższe zapytanie zwraca wszystkie kolumny zaczynające się na “d”:

select(df,starts_with("d"))

Results

analogicznie poniższe zapytanie zwróci wszystkie kolumny kończące się na “e”:

select(df,ends_with("e"))

Results

Operacje te są bardzo proste – wyobraźcie sobie podobne operacje np. w języku SQL 🙂
Co jednak gdy chcemy użyć bardziej skomplikowanego wzorca? Oczywiście możemy to zrobić używając np. funkcji matches i wyrażeń regularnych np. poniższe zapytanie zwróci wszystkie kolumny kończące się na “h” lub “r”

select(df,matches("[hr]$"))

Results

Bardzo podobną funkcjonalność oferuje argument contains – wyszukuje on jednak kolumny nie według wyrażenia regularnego lecz według tego czy kolumna zawiera
w nazwie dany ciąg znaków (w tym przypadku “ar”):

select(df,contains("ar"))

Results

Dplyr pozwala nam również na nadawanie aliasów – możemy to zrobić poprzez operator przypisania “=”:

select(df,Rok=Year,Miesiac=Month,DzienMiesiaca=DayofMonth)

Results

lub poprzez użycie dedykowanej do tego funkcji rename:

rename(df,Rok=Year)
rename(df,Rok=Year)

Results

Jak zapewne zauważyliście jest różnica pomiędzy nadawaniem aliasów w select i rename. Gdy użyjemy select to w rezultacie otrzymamy tylko te kolumny, które zostaną jawnie wskazane, rename z kolei wyświetla wszystkie kolumny z zestawu danych zmienia – wskazanie kolumny służy tylko i wyłącznie nadaniu jej nowego aliasu.

Już jutro powiemy sobie jak przefiltrować dane według określonych warunków – zapraszam!

Leave a Reply