In diesem Tutorial lernen Sie
- wählen()
- Filter()
- Pipeline
- ordnen()
Die Bibliothek mit dem Namen dplyr enthält wertvolle Verben für die Navigation innerhalb des Datensatzes. In diesem Tutorial verwenden Sie den Datensatz "Reisezeiten". Der Datensatz sammelt Informationen über die Reiseleitungen eines Fahrers zwischen seinem Zuhause und seinem Arbeitsplatz. Der Datensatz enthält vierzehn Variablen, darunter:
- DayOfWeek: Identifizieren Sie den Wochentag, an dem der Fahrer sein Auto benutzt
- Entfernung: Die Gesamtentfernung der Reise
- MaxSpeed: Die maximale Geschwindigkeit der Fahrt
- TotalTime: Die Länge der Fahrt in Minuten
Der Datensatz enthält ungefähr 200 Beobachtungen im Datensatz, und die Fahrten fanden zwischen Montag und Freitag statt.
Zunächst müssen Sie:
- Laden Sie den Datensatz
- Überprüfen Sie die Struktur der Daten.
Eine praktische Funktion von dplyr ist die Funktion glimpse (). Dies ist eine Verbesserung gegenüber str (). Wir können gl glight () verwenden, um die Struktur des Datensatzes zu sehen und zu entscheiden, welche Manipulation erforderlich ist.
library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)
Ausgabe:
## Observations: 205## Variables: 14## $ X1, 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…
Dies ist offensichtlich, dass die Variable Kommentare weitere Diagnose benötigt. Bei den ersten Beobachtungen der Variablen "Kommentare" fehlen nur Werte.
sum(df$Comments =)
Code Erklärung
- sum (df $ Comments == ""): Summiere die Beobachtungen gleich "" in den Spaltenkommentaren von df
Ausgabe:
## [1] 181
wählen()
Wir beginnen mit dem Verb select (). Wir brauchen nicht unbedingt alle Variablen, und es empfiehlt sich, nur die Variablen auszuwählen, die Sie für relevant halten.
Wir haben 181 fehlende Beobachtungen, fast 90 Prozent des Datensatzes. Wenn Sie sie ausschließen, können Sie die Analyse nicht fortsetzen.
Die andere Möglichkeit besteht darin, die Variable Comment mit dem Verb select () zu löschen.
Mit select () können wir Variablen auf verschiedene Arten auswählen. Beachten Sie, dass das erste Argument das Dataset ist.
- `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.
Sie können die dritte Möglichkeit verwenden, um die Variable "Kommentare" auszuschließen.
step_1_df <- select(df, -Comments)dim(df)
Ausgabe:
## [1] 205 14
dim(step_1_df)
Ausgabe:
## [1] 205 13
Der ursprüngliche Datensatz verfügt über 14 Funktionen, während der step_1_df über 13 Funktionen verfügt.
Filter()
Das filter () -Verb hilft dabei, die Beobachtungen nach einem Kriterium zu halten. Der Filter () funktioniert genau wie select (). Sie übergeben zuerst den Datenrahmen und dann eine durch Komma getrennte Bedingung:
filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data
Ein Kriterium
Zunächst können Sie die Anzahl der Beobachtungen innerhalb jeder Ebene einer Faktorvariablen zählen.
table(step_1_df$GoingTo)
Code Erklärung
- table (): Zähle die Anzahl der Beobachtungen nach Level. Beachten Sie, dass nur Variablen auf Faktorebene akzeptiert werden
- Tabelle (step_1_df $ GoingTo): Zählen Sie die Anzahl der Fahrten zum endgültigen Ziel.
Ausgabe:
#### GSK Home## 105 100
Die Funktionstabelle () zeigt an, dass 105 Fahrten zu GSK und 100 zu Home fahren.
Wir können die Daten filtern, um einen Datensatz mit 105 Beobachtungen und einen anderen mit 100 Beobachtungen zurückzugeben.
# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)
Ausgabe:
## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)
Ausgabe:
## [1] 105 14
Mehrere Kriterien
Wir können einen Datensatz mit mehr als einem Kriterium filtern. Sie können beispielsweise die Beobachtungen extrahieren, bei denen das Ziel Heimat ist und an einem Mittwoch stattgefunden hat.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)
Ausgabe:
## [1] 23 14
23 Beobachtungen entsprachen diesem Kriterium.
Pipeline
Die Erstellung eines Datensatzes erfordert viele Vorgänge, z.
- Importieren
- verschmelzen
- Auswahl
- Filtern
- und so weiter
Die dplyr-Bibliothek enthält einen praktischen Operator,%>%, der als Pipeline bezeichnet wird . Die Pipeline-Funktion macht die Manipulation sauber, schnell und weniger fehleranfällig.
Dieser Operator ist ein Code, der Schritte ausführt, ohne Zwischenschritte auf der Festplatte zu speichern. Wenn Sie von oben zu unserem Beispiel zurückkehren, können Sie die gewünschten Variablen auswählen und filtern. Wir haben drei Schritte:
- Schritt 1: Daten importieren: Importieren Sie die GPS-Daten
- Schritt 2: Daten auswählen: Wählen Sie GoingTo und DayOfWeek
- Schritt 3: Daten filtern: Nur nach Hause und Mittwoch zurückgeben
Wir können den harten Weg benutzen, um es zu tun:
# 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)
Ausgabe:
## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday
Dies ist keine bequeme Möglichkeit, viele Operationen auszuführen, insbesondere in einer Situation mit vielen Schritten. In der Umgebung werden viele Objekte gespeichert.
Verwenden wir stattdessen den Pipeline-Operator%>%. Wir müssen nur den zu Beginn verwendeten Datenrahmen definieren, und der gesamte Prozess wird daraus ablaufen.
Grundlegende Syntax der Pipeline
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.
Sie können Ihre erste Pipe gemäß den oben aufgeführten Schritten erstellen.
# 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)
Ausgabe:
## [1] TRUE
Wir sind bereit, mit dem Pipeline-Betreiber einen beeindruckenden Datensatz zu erstellen.
ordnen()
Im vorherigen Tutorial erfahren Sie, wie Sie die Werte mit der Funktion sort () sortieren. Die Bibliothek dplyr hat ihre Sortierfunktion. Es funktioniert wie ein Zauber mit der Pipeline. Das Verb arrang () kann eine oder mehrere Zeilen neu anordnen, entweder aufsteigend (Standard) oder absteigend.
- `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
Wir können die Entfernung nach Ziel sortieren.
# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)headAusgabe:
## 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 NoZusammenfassung
In der folgenden Tabelle fassen Sie alle Vorgänge zusammen, die Sie während des Lernprogramms gelernt haben.
Verb Zielsetzung Code Erläuterung Blick Überprüfen Sie die Struktur eines df glimpse(df)Identisch mit str () wählen() Variablen auswählen / ausschließen select(df, A, B ,C)Wählen Sie die Variablen A, B und C aus select(df, A:C)Wählen Sie alle Variablen von A bis C aus select(df, -C)C ausschließen Filter() Filtern Sie den df basierend auf einer oder mehreren Bedingungen filter(df, condition1)Eine Bedingung filter(df, condition1ondition2) ordnen() Sortieren Sie den Datensatz mit einer oder mehreren Variablen arrange(A)Aufsteigende Art von Variable A. arrange(A, B)Aufsteigende Art von Variablen A und B. arrange(desc(A), B)Absteigende Art von Variable A und aufsteigende Art von B. %>% Erstellen Sie zwischen jedem Schritt eine Pipeline step 1 %>% step 2 %>% step 3