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

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: