1.5 Einführung in R

1.5.1 Hintergrund

Los gehts mit der ersten Übung zur Datenanalyse. Wir üben zunächst ein paar ganz grundsätzliche Dinge, für einen sanften Start, und um uns im “tidyverse” zurechtzufinden. Das tidyverse-Paket ist eine Sammlung von R-Paketen, der die Möglichkeiten der Datenmanipulation und -visualisierung erweitert. In dieser ersten Übung lernt ihr grundsätzliche Funktionen kennen um Daten mit tidyverse Funktionen zu laden und einfache “data wrangling” Schritte auszuführen.

Los gehts!

1.5.2 Lernziele

Nach dieser Übungseinheit könnt ihr:

  • erklären was R ist
  • einfache Funktionen in tidyverse selbständig anwenden

1.5.3 Literatur

Wickham H, Cetinkaya-Rundel M & Grolemund G (2023) R for Data Science. Kapitel 2, 12-14.

1.5.4 Tutorial - Die Grundlagen von dplyr

1.5.4.1 Einrichten der Umgebung

Zuerst stellen wir sicher, dass wir die notwendigen Pakete installiert haben und laden diese in unsere Umgebung.

# Erforderliche Pakete laden
library(dplyr)

Anschließen legen wir das “working directory” fest. Damit wird R informiert wo Inputdaten auf der Festplatte gespeichert sind, und wohin output geschrieben wird. Am besten erstellt ihr in eurem Verzeichnis einen eigenen ORdner für die Übung. Ihr könnt einen Ordener über “Session> Set working directory> chose folder” als working directory festlgen oder alternativ, direct in R mit setwd()

setwd("KOMPLETTER PFAD ZU EUREM ORDNER")

# working directory anzeigen
getwd()

1.5.4.2 Laden der Daten

Wir benutzen den öffentlichen penguins Datensatz aus dem palmerpenguins Paket für die Übung. Für die Aufgaben am Ende werdet ihr mit euren Daten von iNaturalist arbeiten. Zunächst laden wir die Daten in unsere R Umgebung. Es ist möglich Daten von allen möglichen Formaten zu laden, wir gucken uns hier kurz .txt, .csv and .xlsx an. Wir werden uns auf die Kernpakete von tidyverse konzentrieren, wie readr, readxl und dplyr, um Daten in einem aufgeräumten Format zu importieren und zu bearbeiten.

1.5.4.3 Laden von Daten aus einer .csv-Datei

Wir beginnen mit dem Laden von Daten aus einer .csv-Datei mit Hilfe der Funktion read_csv() aus dem readr-Paket.

# readr laden
library(readr)

# lade das .csv
data <- read_csv("penguins.csv")

# Die ersten Zeilen zur Kontrolle
head(data)

1.5.4.4 Filtern von Daten

Eine der grundlegenden Operationen in fast jeder Datenanalyse ist das Filtern von Daten auf der Grundlage bestimmter Bedingungen. Die filter-Funktion in dplyr ermöglicht es uns, Zeilen aus einem Datensatz zu extrahieren, die bestimmte Kriterien erfüllen.

Der folgende Code filtert den Datensatz so, dass er nur Messungen zu Adeliepinguinen enthält.

# Daten nach Art
ade <- data %>%
  filter(species == "Chinstrap")

# Anzeige der gefilterten Daten
head(ade)

1.5.4.5 Pipe

Funktionen können in R auf zwei unterschiedliche Arten angesprochen werden: entweder klassisch indem alle Argumente in der KLammer angegeben werden, oder mit Hilfe der “pipe (%>%)” wobei dann das erste Argument vor die Funktion gesetzt wird. Die Pipe hat den VOrteil, dass der Code für MEnschen besser zu lesen ist, und das mehrere Funktoinen PRoblemlos hintereinander angewendet werden können.

# Klassisch
filter(data, species == "Chinstrap")

# mit Pipe
data %>% filter(species == "Chinstrap")

1.5.4.6 Auswählen von Spalten

Neben dem Filtern ist es oft relevant auch bestimmte Spalten auswählen, die von Interesse sind. Die Funktion select() ermöglicht es uns, nur die benötigten Spalten auszuwählen.

Wählt mit dem folgenden Code die spalten “species” und “sex” aus dem Datensatz auswählen.

# Bestimmte Spalten auswählen
selected_data <- data %>%
  select(species, sex)

# Anzeige der ausgewählten Spalten
head(selected_data)

1.5.4.7 Verkettung von Operationen

Eine der wichtigsten Funktionen in R ist die Möglichkeit, mehrere Operationen mit Hilfe des Pipe-Operators (%>%) miteinander zu verknüpfen. Dies ermöglicht es uns, eine Abfolge von Aktionen auf unsere Daten in einer prägnanten und lesbaren Weise durchzuführen.

Kombinieren wir Fitlern und Spaltenauswahl mit Hilfe des Pipe-Operators.

# Zeilen filtern und Spalten auswählen mit dem Pipe-Operator
transformed_data <- data %>%
  filter(sex == "male") %>%
  select(species, sex)

# Anzeige der transformierten Daten
head(transformed_data)

1.5.4.8 Daten zusammenfassen

Das Zusammenfassen von Daten ist oft notwendig, um Einblicke in die allgemeinen Merkmale eines Datensatzes zu erhalten. Die Funktion summarize in dplyr ermöglicht es uns, zusammenfassende Statistiken für bestimmte Variablen zu berechnen.

Wir berechnen das Durschnittsgewicht der Pinguine in unserem Datensatz.

# Berechne das Durchschnittsgewicht
summary_stats <- data %>%
  summarize(d_mass = mean(body_mass_g))

# Anzeige der zusammenfassenden Statistik
summary_stats

1.5.4.9 Daten gruppieren und zusammenfassen

In vielen Fällen möchten wir Daten basierend auf verschiedenen Gruppen innerhalb unseres Datensatzes zusammenfassen. Die Funktion group_by() in dplyr ermöglicht es uns, Daten auf der Grundlage einer oder mehrerer Variablen zu gruppieren, während die Funktion summarize() es uns ermöglicht, zusammenfassende Statistiken innerhalb jeder Gruppe zu berechnen.

Als Beispiel berechnen wir das mittlere Gewicht nach Pinguinart.

# Daten nach Geschlecht gruppieren und Durchschnittsgewicht berechnen
grouped_data <- data %>%
  group_by(species) %>%
  summarize(d_mass = mean(body_mass_g))

# ANzahl der Instanzen pro Gruppe zählen
grouped_data <- data %>%
  group_by(species) %>%
  count()

# Anzeige der gruppierten und zusammengefassten Daten
head(grouped_data)

1.5.4.10 Daten sortieren

Das Sortieren von Daten kann nützlich sein, um unseren Datensatz in eine bestimmte Reihenfolge zu bringen. Die Funktion arrange in dplyr erlaubt es uns, die Zeilen unseres Datensatzes nach einer oder mehreren Variablen zu sortieren.

Wir sortieren den Datensatz nach Gewicht in aufsteigender Reihenfolge.

# Sortieren der Daten nach Gewicht in aufsteigender Reihenfolge
sorted_data <- data %>%
  arrange(body_mass_g)

# Absteigend sortieren
sorted_data <- data %>%
  arrange(desc(body_mass_g))

# Anzeige der sortierten Daten
head(sorted_data)

1.5.4.11 Neue Spalten hinzufügen

Wir können auch einfach neue Variablen zu dem Datensatz hinzufügen oder bestehende Variablen auf der Grundlage bestimmter Transformationen oder Berechnungen. Die Funktion mutate in dplyr ermöglicht es uns, solche Operationen durchzuführen.

Erstellen wir eine neue Variable namens “is_big”, die angibt, ob ein Pinguin zu den 25% schwersten aller gemessenen Individuen gehört. Dazu nutzen wir die ifelse Funktion welche basierend auf einer Bedingung eine WAHR/FALSCH Aussage generiert. Als Bedingung testen wir hier mit der quantile Funktion ob das Gewicht zu den ober 25% gehört.

# Erstellt eine neue Variable, die das Erwachsenenalter angibt.
mutated_data <- data %>%
  mutate(is_big = ifelse(body_mass_g >= quantile(.$body_mass_g, probs = 0.75, na.rm = TRUE), "Ja", "Nein"))

# Anzeige der veränderten Daten
head(mutated_data)

1.5.4.12 Verknüpfungen und Zusammenführung von Daten

Das Kombinieren von Daten aus mehreren Quellen ist eine häufige Aufgabe bei der Datenanalyse. Die Funktionen inner_join, left_join, right_join und full_join in dplyr ermöglichen es uns, verschiedene Arten von joins durchzuführen, um Datensätze zusammenzuführen.

Führen wir einen “inner_join” (behält nur solche Elemente, die in beiden Datensätzen vorkommen) zwischen zwei Datensätzen durch, der auf einer gemeinsamen Variable basiert.

# Zwei Beispieldatensätze erstellen
dataset1 <- data.frame(id = c(1, 2, 3), wert1 = c(10, 20, 30))
dataset2 <- data.frame(id = c(2, 3, 4), wert2 = c(40, 50, 60))

# Durchführen einer inneren Verknüpfung auf der Grundlage der Variable "id".
joined_data <- inner_join(dataset1, dataset2, by = "id")

# Anzeige der verbundenen Daten
joined_data

1.5.5 Fazit

Herzlichen Glückwunsch! Ihr habt die wichtigsten Operationen von dplyr und den ersten Schritt zum data wrangling im tidyverse kennengelernt, wie z.B. Filtern, Auswählen von Spalten, Zusammenfassen von Daten, Gruppieren, Sortieren, Ändern von Daten, Verbinden und Zusammenführen von Daten und Umformen von Daten.

1.5.6 Aufgaben

Zeit euer neues Wissen anzuwenden! Löst die folgenden Aufgaben und speichert die Antworten (Text + strukturierter Code) in einem .R Script und ladet es am Ende der Übung auf Ilias hoch. Im “data” Ordner findet ihr eine iNaturalist.csv Datei, welche eure iNaturalist Fundpunkte beinhaltet.

  1. Schreibt einen Absatz (max. 7 Sätze) um den Hintergrund der Heutigen Übung darzulegen. Folgt den Kriterien aus dem Vortrag

  2. Ladet den “iNaturalist.csv” Datensatz als data.frame in R.

  3. Wie viele Taxa habt ihr insgesamt gefunden, welche sind die 10 am häufigsten beobachteten Taxa?

  4. Fügt dem data.frame eine weitere Spalte hinzu, welche alle Einträge markiert, die von mehr als einer Userin bestimmt wurden.

  5. Schreibt einen Reflexionsabsatz: Welche Haltung zu R hattet ihr vor der Übung, wie hat sich eure Haltung durch die Übung verändert, und warum. Welcher Code-Block, bzw welche Funktion war am spannensten oder die größte Herausforderung, und warum?