R Select (), Filter (), Arrange (), Pipeline with Example

Spisie treści:

Anonim

W tym samouczku dowiesz się

  • Wybierz()
  • Filtr()
  • Rurociąg
  • zorganizować()

Biblioteka o nazwie dplyr zawiera cenne czasowniki do nawigacji w zestawie danych. W tym samouczku użyjesz zestawu danych Czas podróży. Zbiór danych gromadzi informacje na temat trasy przejazdu kierowcy między jego domem a miejscem pracy. Zbiór danych zawiera czternaście zmiennych, w tym:

  • DayOfWeek: Określ dzień tygodnia, w którym kierowca korzysta z samochodu
  • Odległość: całkowita odległość podróży
  • MaxSpeed: maksymalna prędkość podróży
  • TotalTime: długość podróży w minutach

Zbiór danych zawiera około 200 obserwacji w zbiorze danych, a przejażdżki odbywały się od poniedziałku do piątku.

Przede wszystkim musisz:

  • załaduj zbiór danych
  • sprawdź strukturę danych.

Jedną z przydatnych funkcji dplyr jest funkcja glimpse (). To jest ulepszenie w stosunku do str (). Możemy użyć funkcji glimpse (), aby zobaczyć strukturę zbioru danych i zdecydować, jaka manipulacja jest wymagana.

library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)

Wynik:

## Observations: 205## Variables: 14## $ X  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,… ## $ Date  1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20… ## $ StartTime  16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3… ## $ DayOfWeek  Friday, Friday, Wednesday, Wednesday, Tuesday,… ## $ GoingTo  Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS… ## $ Distance  51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37… ## $ MaxSpeed  127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2… ## $ AvgSpeed  78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,… ## $ AvgMovingSpeed  84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,… ## $ FuelEconomy  , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89… ## $ TotalTime  39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,… ## $ MovingTime  36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,… ## $ Take407All  No, No, No, No, No, No, No, No, No, No, No, No… ## $ Comments  , , , , , , , , , , , , , , , Put snow tires o… 

Jest to oczywiste, że zmienna Komentarze wymaga dalszej diagnostyki. Pierwsze obserwacje zmiennej Comments to tylko brakujące wartości.

sum(df$Comments =)

Objaśnienie kodu

  • sum (df $ Comments == ""): Zsumuj obserwacje równe "" w komentarzach kolumny z df

Wynik:

## [1] 181 

Wybierz()

Zaczniemy od czasownika select (). Niekoniecznie potrzebujemy wszystkich zmiennych, a dobrą praktyką jest wybranie tylko tych zmiennych, które uznasz za istotne.

Mamy 181 brakujących obserwacji, czyli prawie 90 procent zbioru danych. Jeśli zdecydujesz się je wykluczyć, nie będziesz mógł kontynuować analizy.

Inną możliwością jest usunięcie zmiennej Comment z czasownikiem select ().

Możemy wybierać zmienne na różne sposoby za pomocą funkcji select (). Zwróć uwagę, że pierwszym argumentem jest zbiór danych.

- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset.- `select(df, A:C)`: Select all variables from A to C from df dataset.- `select(df, -C)`: Exclude C from the dataset from df dataset.

Możesz użyć trzeciego sposobu, aby wykluczyć zmienną Komentarze.

step_1_df <- select(df, -Comments)dim(df)

Wynik:

## [1] 205 14
dim(step_1_df)

Wynik:

## [1] 205 13 

Oryginalny zbiór danych ma 14 funkcji, podczas gdy step_1_df ma 13.

Filtr()

Czasownik filter () pomaga zachować obserwacje zgodnie z kryteriami. Filtr () działa dokładnie tak samo jak select (), najpierw podajesz ramkę danych, a następnie warunek oddzielony przecinkiem:

filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data

Jedno kryterium

Przede wszystkim możesz policzyć liczbę obserwacji na każdym poziomie zmiennej czynnikowej.

table(step_1_df$GoingTo)

Objaśnienie kodu

  • table (): Policz liczbę obserwacji według poziomu. Uwaga, akceptowane są tylko zmienne poziomu czynnika
  • table (step_1_df $ GoingTo): Policz liczbę podróży do miejsca docelowego.

Wynik:

#### GSK Home## 105 100

Tabela funkcji () wskazuje, że 105 przejazdów jedzie do GSK, a 100 do domu.

Możemy filtrować dane, aby zwrócić jeden zestaw danych zawierający 105 obserwacji i inny zestaw zawierający 100 obserwacji.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Wynik:

## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)

Wynik:

## [1] 105 14 

Wiele kryteriów

Możemy filtrować zbiór danych według więcej niż jednego kryterium. Na przykład możesz wyodrębnić obserwacje, w których miejscem docelowym jest Dom i które miały miejsce w środę.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)

Wynik:

## [1] 23 14 

Kryterium to spełniały 23 obserwacje.

Rurociąg

Utworzenie zbioru danych wymaga wielu operacji, takich jak:

  • Importowanie
  • scalanie
  • wybieranie
  • filtracja
  • i tak dalej

Biblioteka dplyr pochodzi z praktycznym operatora%>%, zwany rurociąg . Funkcja rurociągu sprawia, że ​​manipulacja jest czysta, szybka i mniej podatna na błędy.

Ten operator to kod, który wykonuje kroki bez zapisywania kroków pośrednich na dysku twardym. Jeśli wrócisz do naszego przykładu z góry, możesz wybrać interesujące zmienne i przefiltrować je. Mamy trzy kroki:

  • Krok 1: Importuj dane: Importuj dane GPS
  • Krok 2: Wybierz dane: Wybierz GoingTo i DayOfWeek
  • Krok 3: Filtruj dane: Zwróć tylko stronę główną i środę

Możemy to zrobić w trudny sposób:

# Step 1step_1 <- read.csv(PATH)# Step 2step_2 <- select(step_1, GoingTo, DayOfWeek)# Step 3step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")head(step_3)

Wynik:

## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday

Nie jest to wygodny sposób wykonywania wielu operacji, zwłaszcza w sytuacji, gdy jest dużo kroków. Środowisko kończy się na wielu przechowywanych obiektach.

Zamiast tego użyjmy operatora potoku%>%. Musimy tylko zdefiniować ramkę danych używaną na początku, a cały proces będzie z niej płynął.

Podstawowa składnia potoku

New_df <- df %>%step 1 %>%step 2 %>%… arguments- New_df: Name of the new data frame- df: Data frame used to compute the step- step: Instruction for each step- Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.

Możesz utworzyć swój pierwszy potok, wykonując czynności wymienione powyżej.

# Create the data frame filter_home_wed.It will be the object return at the end of the pipelinefilter_home_wed <-#Step 1read.csv(PATH) % > %#Step 2select(GoingTo, DayOfWeek) % > %#Step 3filter(GoingTo == "Home",DayOfWeek == "Wednesday")identical(step_3, filter_home_wed)

Wynik:

## [1] TRUE 

Jesteśmy gotowi do stworzenia oszałamiającego zestawu danych z operatorem rurociągu.

zorganizować()

Z poprzedniego samouczka dowiesz się, jak sortować wartości za pomocą funkcji sort (). Biblioteka dplyr ma swoją funkcję sortowania. Działa jak urok z rurociągiem. Czasownik aranżacji () może zmienić kolejność jednego lub wielu wierszy, rosnąco (domyślnie) lub malejąco.

- `arrange(A)`: Ascending sort of variable A- `arrange(A, B)`: Ascending sort of variable A and B- `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B 

Możemy sortować odległość według miejsca docelowego.

# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

Wynik:

## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All## 1 78.4 8.45 45.7 37.0 No## 2 89.0 8.28 35.6 32.6 Yes## 3 87.3 7.89 38.5 33.3 Yes## 4 77.8 8.45 41.6 37.6 No## 5 93.2 7.81 34.3 31.5 Yes## 6 78.8 8.54 40.4 37.3 No

Podsumowanie

W poniższej tabeli podsumujesz wszystkie operacje, których nauczyłeś się podczas samouczka.

Czasownik Cel Kod Wyjaśnienie
dojrzeć sprawdź strukturę df
glimpse(df)
Identyczne z str ()
Wybierz() Wybierz / wyklucz zmienne
select(df, A, B ,C)
Wybierz zmienne A, B i C
select(df, A:C)
Wybierz wszystkie zmienne od A do C
select(df, -C)
Wyklucz C.
filtr() Filtruj df na podstawie jednego lub wielu warunków
filter(df, condition1)
Jeden warunek
filter(df, condition1
ondition2)
zorganizować() Posortuj zbiór danych za pomocą jednej lub wielu zmiennych
arrange(A)
Rosnąco sortowanie zmiennej A
arrange(A, B)
Rosnąco rodzaj zmiennej A i B.
arrange(desc(A), B)
Malejąco sortowanie zmiennej A i rosnąco B
%>% Utwórz potok między każdym krokiem
step 1 %>% step 2 %>% step 3