R Wählen Sie (), Filter (), Arrange (), Pipeline mit Beispiel

Inhaltsverzeichnis:

Anonim

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## $ 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… 

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)head

Ausgabe:

## 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 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, condition1
ondition2)
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