R Select(), Filter(), Arrange(), Pipeline mit Beispiel
Die Bibliothek namens dplyr enthรคlt wertvolle Verben fรผr die Navigation im Datensatz. In diesem Tutorial verwenden Sie den Datensatz โReisezeitenโ. Der Datensatz sammelt Informationen รผber die Fahrt, die ein Fahrer zwischen seinem Wohnort und seinem Arbeitsplatz zurรผcklegt. Der Datensatz enthรคlt vierzehn Variablen, darunter:
- DayOfWeek: Identifizieren Sie den Wochentag, an dem der Fahrer sein Auto nutzt
- Distanz: Die Gesamtdistanz der Fahrt
- MaxSpeed: Die maximale Geschwindigkeit der Fahrt
- TotalTime: Die Lรคnge der Fahrt in Minuten
Der Datensatz enthรคlt etwa 200 Beobachtungen, und die Fahrten fanden dazwischen statt Monday bis Freitag.
Zunรคchst mรผssen Sie Folgendes tun:
- 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 glimpse() verwenden, um die Struktur des Datensatzes anzuzeigen 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)
Ausgang:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
Dies ist offensichtlich, dass die Variable Kommentare einer weiteren Diagnose bedarf. Bei den ersten Beobachtungen der Variable โKommentareโ handelt es sich lediglich um fehlende Werte.
sum(df$Comments =="")
Code Erlรคuterung
- sum(df$Comments ==โโ): Summiert die Beobachtungen, die โโ in den Spaltenkommentaren von df ergeben
Ausgang:
## [1] 181
wรคhlen()
Wir beginnen mit dem Verb select(). Wir benรถtigen 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 unterschiedliche Weise auswรคhlen. Beachten Sie, dass das erste Argument der Datensatz 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.
Mit der dritten Mรถglichkeit kรถnnen Sie die Variable โKommentareโ ausschlieรen.
step_1_df <- select(df, -Comments) dim(df)
Ausgang:
## [1] 205 14
dim(step_1_df)
Ausgang:
## [1] 205 13
Der ursprรผngliche Datensatz verfรผgt รผber 14 Funktionen, wรคhrend โstep_1_dfโ รผber 13 verfรผgt.
Filter()
Das Verb filter() hilft dabei, die Beobachtungen einem bestimmten Kriterium zuzuordnen. 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 Erlรคuterung
- table(): Zรคhlt die Anzahl der Beobachtungen nach Ebene. Beachten Sie, dass nur Variablen auf Faktorebene akzeptiert werden
- table(step_1_df$GoingTo): Zรคhlt die Anzahl der Fahrten zum endgรผltigen Ziel.
Ausgang:
## ## GSK Home ## 105 100
Die Funktion table() gibt an, dass 105 Fahrten nach GSK und 100 nach Home gehen.
Wir kรถnnen die Daten filtern, um einen Datensatz mit 105 Beobachtungen und einen anderen mit 100 Beobachtungen zurรผckzugeben.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Ausgang:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Ausgang:
## [1] 105 14
Mehrere Kriterien
Wir kรถnnen einen Datensatz anhand mehrerer Kriterien filtern. Zum Beispiel kรถnnen Sie โฆtracbei den Beobachtungen, bei denen das Ziel โZuhauseโ ist und die an einem Mittwoch stattfanden.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Ausgang:
## [1] 23 14
23 Beobachtungen erfรผllten dieses Kriterium.
Pipeline
Die Erstellung eines Datensatzes erfordert zahlreiche Vorgรคnge, beispielsweise:
- Einfuhr
- Verschmelzung
- Auswahl
- Filterung
- usw.
Die dplyr-Bibliothek verfรผgt รผber einen praktischen Operator, %>%, genannt Pipeline. 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 zu unserem Beispiel von oben 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 โHeimโ und โMittwochโ zurรผckgeben
Wir kรถnnen es auf die harte Tour machen:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
Ausgang:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Dies ist keine praktische Methode zum Ausfรผhren vieler Vorgรคnge, insbesondere in einer Situation mit vielen Schritten. In der Umgebung werden am Ende viele Objekte gespeichert.
Verwenden wir stattdessen den Pipeline-Operator %>%. Wir mรผssen nur den am Anfang verwendeten Datenrahmen definieren und der gesamte Prozess wird daraus abgeleitet.
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 anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
Sie kรถnnen Ihre erste Pipe erstellen, indem Sie die oben aufgefรผhrten Schritte befolgen.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
Ausgang:
## [1] TRUE
Wir sind bereit, mit dem Pipeline-Betreiber einen beeindruckenden Datensatz zu erstellen.
arrangieren()
Im vorheriges Tutorialerfahren Sie, wie Sie die Werte mit der Funktion sort() sortieren. Die Bibliothek dplyr hat ihre Sortierfunktion. Es funktioniert wunderbar mit der Pipeline. Das Verb โarrange()โ kann eine oder mehrere Zeilen entweder aufsteigend (Standard) oder absteigend neu anordnen.
- `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 Zielort sortieren.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Ausgang:
## 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
Zusammenfassung
In der folgenden Tabelle sind alle Operationen zusammengefasst, die Sie im Lernprogramm gelernt haben.
| Verb | Ziel | 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, condition1 |
Bedingung2) | ||
| arrangieren() | Sortieren Sie den Datensatz nach einer oder mehreren Variablen |
arrange(A) |
Aufsteigende Art der Variablen A |
arrange(A, B) |
Aufsteigende Art der 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 |
