Sobald wir Daten importiert haben, müssen wir diese in der Regel noch aufbereiten, bevor wir mit der Analyse beginnen können. Das Aufbereiten von Daten wird auch als Data Wrangling oder Data Cleaning bezeichnet.
Um einen Eindruck davon zu bekommen, welche Aufbereitungsschritte nötig oder sinnvoll sein könnten, ist es hilfreich, sich die Daten zunächst einmal anzuschauen.
8.1 👀 Erster Eindruck
Für einen ersten Eindruck bietet das Paket dplyr die Funktion glimpse().
Sofern dies in der aktuellen Sitzung noch nicht passiert ist, müssen wir zunächst wieder die tidyverse-Pakete laden und die Daten in R importieren (siehe dazu auch Kapitel 7 und Kapitel 6). Danach können wir uns die Daten mit glimpse() anschauen.
Hinweis: Je nachdem, ob bzw. wo Sie die Daten aus Kapitel 6 gespeichert haben, müssen Sie den Dateipfad im folgenden Code ggf. anpassen.
library(tidyverse)
Warning: Paket 'tidyverse' wurde unter R Version 4.5.3 erstellt
Warning: Paket 'ggplot2' wurde unter R Version 4.5.3 erstellt
Warning: Paket 'purrr' wurde unter R Version 4.5.2 erstellt
Warning: Paket 'stringr' wurde unter R Version 4.5.2 erstellt
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.2.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Rows: 245 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): VideoID, AuthorDisplayName, Comment, CommentID
dbl (1): LikeCount
lgl (1): ParentID
dttm (2): PublishedAt, UpdatedAt
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Wenn wir uns den gesamten Datenstz in RStudio anschauen wollen, können wir die Funktion View() verwenden. Diese öffnet die Daten in einem neuen Tab und zeigt sie in einer tabellarischen Ansicht an.
View(yt_demo)
8.2 Variablen auswählen
Um bestimmte Variablen aus einem Datensatz auszuwählen, können wir die Funktion select() aus dem Paket dplyr verwenden. Diese Funktion ermöglicht es uns, eine oder mehrere Variablen aus einem Datensatz auszuwählen und einen neuen Datensatz zu erstellen, der nur diese Variablen enthält.
Durch die Verwendung von select() ändert sich die Anzahl der Spalten im Datensatz.
ncol(yt_demo)
[1] 8
ncol(yt_selected)
[1] 3
Um nicht alle Variablennamen tippen zu müssen, gibt es einige Möglichkeiten. Z.B. kann man im Datensatz aufeinanderfolgende Variablen im Befehl select() auswählen, indem man nur den Namen der ersten und letzten Variable nennt und diese durch einèn : trennt.
Es gibt auch noch viele weitere Optionen, um Variablen auszuwählen, z.B. die Auswahl von Variablen, die bestimmte Zeichenketten in ihren Namen enthalten oder die Auswahl von Variablen anhand ihres Typs. Weitere Informationen zu diesen Möglichkeiten finden Sie in der Dokumentation zur Funktion select().
8.3 Variablen umbenennen
Für die Umbenennung von Variablen gibt es zwei Optionen: Direkt bei der Auswahl mit select() oder unabhängig davon mit der Funktion rename().
Die Syntax für die Umbenennung von Variablen ist dabei neuer_name = alter_name. Es ist natürlich auch möglich, nur einige Variablen umzubenennen und die anderen unverändert zu lassen.
9 Variablen anders anordnen
Die Funktion select() kann auch verwendet werden, um die Reihenfolge der Variablen in einem Datensatz zu ändern. Dazu müssen Sie die Variablen in der gewünschten Reihenfolge angeben.
Eine weitere Option ist die Funktion relocate(), mit der Sie Variablen an eine bestimmte Position verschieben können, z.B. an den Anfang oder das Ende des Datensatzes oder vor oder nach einer bestimmten Variable.
Wenn Sie eine Variable vor eine bestimmte andere Variable verschieben möchten, können Sie als Argument .before anstelle von .after verwenden.
9.1 Zeilen filtern
Um bestimmte Zeilen aus einem Datensatz auszuwählen, können Sie die Funktion filter() aus dem Paket dplyr verwenden. Diese Funktion ermöglicht es, Zeilen basierend auf bestimmten Bedingungen auszuwählen und einen neuen Datensatz zu erstellen, der nur diese Zeilen enthält.
Um die Funktion filter() sinnvoll einsetzen zu können, ist es wichtig, die wichtigsten logischen Operatoren zu kennen, die in den Bedingungen verwendet werden können. Dazu gehören:
== (gleich)
!= (ungleich)
< (kleiner als)
> (größer als)
<= (kleiner oder gleich)
>= (größer oder gleich)
& (und)
| (oder)
! (nicht)
yt_popular <- yt_demo %>%filter(LikeCount >100)
Durch die Verwendung von filter() ändert sich die Anzahl der Zeilen im Datensatz.
nrow(yt_demo)
[1] 245
nrow(yt_popular)
[1] 132
Eine besondere zusätzliche Option bietet die Funktion between(), mit der Sie Zeilen auswählen können, deren Werte in einem bestimmten Bereich liegen.
Die Funktion filter() kann auch genutzt werden, um fehlende Werte (missing values) zu entfernen. Das Symbol für fehlende Werte in R ist NA. Hierzu müssen Sie filter() mit der Funktion is.na() kombinieren, um Zeilen auszuwählen, in denen eine bestimmte Variable fehlende Werte enthält, oder die Funktion !is.na(), um Zeilen auszuwählen, in denen eine bestimmte Variable keine fehlenden Werte enthält.
Im nachfolgenden Beispiel werden alle Zeilen ausgewählt, in denen die Variable ParentID keinen fehlenden Wert enthält, d.h. alle Antworten auf Kommentare (also keine Top-Level-Kommentare).
Wir sehen hier, dass in den simulierten Daten keine Antworten auf Kommentare enthalten sind, da die Anzahl der Zeilen im neuen Datensatz yt_responses gleich 0 ist (d.h. alle Zeilen im ursprünglichen Datensatz yt_demo haben ein NA in der Variable ParentID).
9.2 Veränderung der Reihenfolge der Zeilen
Mit der Funktion arrange() aus dem Paket dplyr kann man die Reihenfolge der Zeilen in einem Datensatz zu ändern. Sie können die Zeilen basierend auf den Werten einer oder mehrerer Variablen sortieren. Standardmäßig werden die Zeilen in aufsteigender Reihenfolge sortiert. Sie können jedoch auch die Option desc() verwenden, um die Zeilen in absteigender Reihenfolge zu sortieren.
Wie im Kapitel 7 bereits erwähnt, können Sie mehrere Befehle miteinander verketten, um komplexere Datenmanipulationen durchzuführen. Dazu verwenden Sie den sogenannten “Pipe”-Operator %>%, der es ermöglicht, die Ausgabe eines Befehls als Eingabe für den nächsten Befehl zu verwenden.
Rows: 193
Columns: 3
$ AuthorDisplayName <chr> "PetFanatic", "PetLoverB", "PetLoverA", "PetLoverL",…
$ Comment <chr> "Can't get enough of this! 😍", "Made me smile from e…
$ LikeCount <dbl> 400, 390, 380, 370, 360, 350, 350, 340, 330, 330, 32…
9.4 Datensätze zusammenführen
Manchmal ist es notwendig, mehrere Datensätze zusammenzuführen, z.B. wenn die Daten in mehreren Dateien gespeichert sind oder wenn man Daten aus verschiedenen Quellen kombinieren möchte.
Das Paket dplyr bietet zahlreiche Möglichkeiten, um Datensätze auf unterschiedliche Weise zusammenzuführen. Die einfachsten Varianten sind die Funktionen bind_rows() und bind_cols(). Diese fügen einem Datensatz Zeilen (Rows) bzw. Fälle oder Spalten (columns) bzw. Variablen hinzu.
Wichtig: Damit die Funktionen bind_rows() und bind_cols() funktionieren, müssen die Datensätze, die zusammengeführt werden sollen, die gleiche Anzahl von Spalten bzw. Zeilen haben. Zudem müssen die Spaltennamen in den Datensätzen, die mit bind_rows() zusammengeführt werden sollen, übereinstimmen und für bind_cols() muss die Reihenfolge der Zeilen in den beiden Datensätzen dieselbe sein.
Wenn die obigen Bedingungen nicht erfüllt sind, gibt es viele andere Funktionen, mit denen Datensätze kombiniert werden können. Die wichtigsten sind die sogenannten “mutating joins”, die einen neuen nach unterschiedlichen Regeln kombinierten Datensatz erstellen. Eine ausführliche Beschreibung aller sogenannten “Joins” finden Sie im entsprechenden Kapitel des Online-Buchs R for Data Science.