diff --git a/bgg_dataset.xlsx b/bgg_dataset.xlsx
index dd2c7729d2c7daa7b5a1344756f2f17c388d3556..06ea6fdc9588b7665a1ae5a07b2ce82834279095 100644
Binary files a/bgg_dataset.xlsx and b/bgg_dataset.xlsx differ
diff --git a/tutorial_page.Rmd b/tutorial_page.Rmd
index 3e482ec3d69f22b793eaaf0aee0e854f9d89f196..6308785e2a0a0e2d73ab4c5f40d58c85b61bc10f 100644
--- a/tutorial_page.Rmd
+++ b/tutorial_page.Rmd
@@ -7,11 +7,10 @@ runtime: shiny_prerendered
 ```{r setup, include=FALSE}
 library(learnr)
 library(readxl)
-knitr::opts_chunk$set(echo = FALSE)
 gameData <- read_excel("bgg_dataset.xlsx", sheet = "Sheet")
+knitr::opts_chunk$set(echo = FALSE)
 ```
 
-
 ## Datenbasis
 
 ### Datenherkunft
@@ -57,43 +56,143 @@ Wir formulieren zwei Hypothesen, die wir im "Datenanalyse"-Abschnitt testen werd
 
 ### Einlesen von Daten
 
-*Here's an exercise where the chunk is pre-evaluated via the `exercise.eval` option (so the user can see the default output we'd like them to customize). We also add a "hint" to the correct solution via the chunk immediate below labeled `print-limit-hint`.*
+Um Datensätze mit R zu analysieren, mussen diese zuerst eingelesen werden. Je nach Struktur
+des Datenfiles kommen verschiedene Einlese-Befehle zur Anwendung. Es können u.a. Textfiles
+(.txt, .dat), Datenfiles (.csv) und Excel-Files eingelesen werden.
+
+#### XLSX-Dateien in R importieren
+In diesem Tutorial benutzen wir eine .xlsx Datei, die wir einlesen müssen. XLSX-Dateien lassen sich aus Excel heraus speichern und sind heutzutage weit verbreitet. Wir lesen hier die Datei "bgg_dataset.xlsx" mit dem Befehl read_excel in den Dataframe data_xlsx ein.
+
+Für diese Aufgabe bietet sich das readxl-Paket an, das am einfachsten mit den folgenden Befehlen installiert und geladen wird:
+
+```{r install-readxl, exercise=TRUE}
+install.packages("readxl")
+library (readxl)
+```
+
+Wie du sehen kannst, ist der Package schonmal installiert und wird verwendet, deswegen lässt R nicht zu, dass es wieder installiert wird.
+
+Wir können unser Datensatz einlesen:
+
+```{r read-data, exercise=TRUE}
+gameData <- read_excel("bgg_dataset.xlsx", sheet = "Sheet")
+```
+
+Leider funktioniert diese Funktion in diesem Dokument nicht, aber keine Sorge, wir haben Sie im Hintergrund genauso wie hier benutzt.
+
+Wir können jetzt unsere Daten benutzen:
+
+```{r show-data, exercise=TRUE}
+gameData
+```
+
+Nur eine Spalte aus dem Datensatz lässt sich wie folgt lesen:
+
+```{r read-column, exercise=TRUE}
+gameData$`Year Published`
+```
+
+You can swap `Year Published` with every column if the set and try it out!
+
+Wie du weitere Dateientypen einlesen und benutzen kannst, findest du in diesem [Tutorial von Björn Walther](https://bjoernwalther.com/daten-in-r-importieren/).
+
+### Leerstellen beheben
+
+Das Beheben von Leerstellen in R Studio erfordert spezifische Schritte, die je nach Art der Daten und der Art der Probleme variieren können.
 
-Modify the following code to limit the number of rows printed to 5:
+#### In einer bestimmten Spalte:
 
-```{r print-limit, exercise=TRUE, exercise.eval=TRUE}
-mtcars
+```{r remove-empties-column, exercise=TRUE}
+gameData$`Year Published` <- trimws(gameData$`Year Published`)
+gameData$`Year Published`
 ```
 
-```{r print-limit-hint}
-head(mtcars)
+#### In allen Spalten:
+
+```{r remove-empties, exercise=TRUE}
+gameData <- lapply(gameData, trimws)
+gameData
+```
+
+In unserem Dataset scheint alles gut zu sein, deswegen haben wir keine Änderungen nach Ausführung den Befehlen.
+
+### Inkonsistenzen beheben
+
+Das Beheben von Leerstellen in R Studio erfordert spezifische Schritte, die je nach Art der Daten und der Art der Probleme variieren können.
+
+#### Standardisierung der Schreibweise:
+
+```{r to-lowercase-column, exercise=TRUE}
+gameData$`Mechanics` <- tolower(gameData$`Mechanics`)
+gameData$`Mechanics`
 ```
 
-### Inkonsistenzen und Leerstellen beheben
+Somit wurden alle String in der "Mechanics"-Spalte zur Lowercase gecastet.
+
+#### Ersetzen von Werten:
+
+```{r replace-variable, exercise=TRUE}
+gameData$`Mechanics` <- gsub("Action", "ACTION", gameData$`Mechanics`)
+gameData$`Mechanics`
+```
 
-*Here's an exercise where the chunk is pre-evaluated via the `exercise.eval` option (so the user can see the default output we'd like them to customize). We also add a "hint" to the correct solution via the chunk immediate below labeled `print-limit-hint`.*
+Somit haben wir alle "Action" Strings mit "ACTION" ersetzt.
 
-Modify the following code to limit the number of rows printed to 5:
+#### Behandlung von fehlenden Werten:
 
-### Quiz
+```{r replace-missing-variable, exercise=TRUE}
+gameData$`Rating Average`[is.na(gameData$`Rating Average`)] <- mean(gameData$`Rating Average`, na.rm = TRUE)
+```
 
-*You can include any number of single or multiple choice questions as a quiz. Use the `question` function to define a question and the `quiz` function for grouping multiple questions together.*
+Dieser Befehl ersetzt fehlende Werte durch der Median der vorhandenen Werten in der Spalte.
 
-Some questions to verify that you understand the purposes of various base and recommended R packages:
+#### Entfernen von Duplikaten
 
-```{r quiz}
+```{r remove-duplicates, exercise=TRUE}
+gameData <- unique(gameData)
+```
+
+Dieser Befehl entfernt Duplikaten basierend auf allen Spalten.
+Wir haben aber in unserem Datensatz keine Duplikaten.
+
+#### Behandlung von Sonderzeichen
+
+```{r replace-special-chars, exercise=TRUE}
+gameData$`Mechanics` <- gsub("[^a-zA-Z0-9 ]", "", gameData$`Mechanics`)
+```
+
+Dieser Befehl entfernt Sonderzeichen in der Spalte "Mechanics".
+
+
+Diese Beispiele sind allgemeiner Natur, und Sie sollten sie an Ihre spezifischen Daten und Probleme anpassen. Inkonsistenzen und Leerstellen können in verschiedenen Formen auftreten, und es ist wichtig, die geeigneten Methoden für Ihre speziellen Daten anzuwenden. Beachten Sie auch, dass Datenbereinigung oft datenabhängig ist, und eine gründliche Analyse der Daten ist vor der Bereinigung ratsam.
+
+### Jetzt bist du dran! Teste was du in diesem Abschnitt über Daten einlesen gelernt hast:
+
+```{r second-quiz}
 quiz(
-  question("Which package contains functions for installing other R packages?",
-    answer("base"),
-    answer("tools"),
-    answer("utils", correct = TRUE),
-    answer("codetools")
+  question("Mit welchem R-Befehl lassen sich Packages installieren?",
+    answer("install.packages()", correct = TRUE),
+    answer("add.packages()"),
+    answer("install.library()"),
+    answer("install()")
+  ),
+  question("Mit welchem R-Befehl lassen sich die installierten Packages initialisieren?",
+    answer("use()"),
+    answer("library()", correct = TRUE),
+    answer("init()"),
+    answer("install.packages()")
+  ),
+  question("Welcher Packet benutzen wir, um XLSX-Dateien zu lesen?",
+    answer("readxl()", correct = TRUE),
+    answer("readxls()"),
+    answer("readexcel()"),
+    answer("excelread()")
   ),
-  question("Which of the R packages listed below are used to create plots?",
-    answer("lattice", correct = TRUE),
-    answer("tools"),
-    answer("stats"),
-    answer("grid", correct = TRUE)
+  question("Wie lassen sich einzelne Spalten aus dem Datensatz auslesen?",
+    answer("dataset&\\`column\\`"),
+    answer("column$dataset"),
+    answer("dataset%\\`column\\`"),
+    answer("dataset$\\`column\\`", correct = TRUE)
   )
 )
 ```