Datenstrukturen
Zuletzt aktualisiert am 2025-10-28 | Diese Seite bearbeiten
Geschätzte Zeit: 20 Minuten
Übersicht
Fragen
- Welche “Datenarten” gibt es?
- Wie organisiere ich tabellarische Daten?
- Was ist “tidy”?
Ziele
- Standarddatentypen in R
-
data.frameundtibble - “tidy” Konzept
Für die Verarbeitung von tabellarischen Daten werden in R i.d.R.
data.frames verwendet. Das tidyverse package
liefert eine erweiterte Version des data.frames, das
tibble, welches etwas transparenter in seiner Verwendung
ist. In einem tibble (oder data.frame)
entspricht jede Zeile einem Datensatz (oder einer Beobachtung) und jede
Spalte einer Variable (oder einem Merkmal) dieses Datensatzes. Damit
haben alle Daten in der gleichen Spalte den gleichen Datentyp, z.B.
“Zahl” (numeric), “Kommazahl” (double),
“Ganzzahl” (integer), “Text” (character),
“Datum” (date), etc. Im Folgenden wird der Beispieldatensatz
storms aus dem dplyr package gezeigt.
R
dplyr::storms
AUSGABE
# A tibble: 19,537 × 13
name year month day hour lat long status category wind pressure
<chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <fct> <dbl> <int> <int>
1 Amy 1975 6 27 0 27.5 -79 tropical d… NA 25 1013
2 Amy 1975 6 27 6 28.5 -79 tropical d… NA 25 1013
3 Amy 1975 6 27 12 29.5 -79 tropical d… NA 25 1013
4 Amy 1975 6 27 18 30.5 -79 tropical d… NA 25 1013
5 Amy 1975 6 28 0 31.5 -78.8 tropical d… NA 25 1012
6 Amy 1975 6 28 6 32.4 -78.7 tropical d… NA 25 1012
7 Amy 1975 6 28 12 33.3 -78 tropical d… NA 25 1011
8 Amy 1975 6 28 18 34 -77 tropical d… NA 30 1006
9 Amy 1975 6 29 0 34.4 -75.8 tropical s… NA 35 1004
10 Amy 1975 6 29 6 34 -74.8 tropical s… NA 40 1002
# ℹ 19,527 more rows
# ℹ 2 more variables: tropicalstorm_force_diameter <int>,
# hurricane_force_diameter <int>
Bei der Verwendung von tibbles sind unter den
Spaltennamen die Datentypen der Spalten abgekürzt dargestellt.
data.frames oder tibbles können auch aus
anderen Datenstrukturen erstellt werden, z.B. aus vectors,
lists oder matrices. Kleinere Datensätze
können auch direkt als tibble erstellt werden, indem die
Daten in die Funktion tibble() eingegeben werden.
R
marriages <-
tibble(
name = c("Alice", "Bob", "Charlie","Diana"),
age = c(25, 30, 35, 12),
married = c(TRUE, FALSE, TRUE, FALSE)
)
Ziel der Datenverarbeitung ist es, die Daten so zu transformieren, dass sie für die Analyse und Visualisierung geeignet sind und ein Format wie oben gezeigt vorweisen. Wenn das der Fall ist, sprich
- jede Zeile entspricht einem Datensatz und
- jede Spalte entspricht einer Variable,
wird der Datensatz als “tidy” bezeichnet, was im Folgenden visualisiert wird.

Spaltenzugriff
Betrachten sie den Datensatz marriages von oben.
Wie können Sie nur die Spalte name aus dem Datensatz
extrahieren?
R
# base R
marriages$name # mit "$" ohne Anführungszeichen (Standardfall)
marriages$`name` # mit "$" und "backtick" quotes für Variablennamen mit Sonderzeichen
marriages[["name"]] # WICHTIG: Doppelte eckige Klammern und Name in quotes, siehe unten !
marriages[[1]] # mit doppelter eckiger Klammer und Spaltenindex (nicht empfohlen, sicherer via Namen)
# tidyverse dplyr package
dplyr::pull(marriages, name) # ohne "dplyr::" wenn dplyr geladen ist (library(dplyr))
# oder in einer pipe, was später diskutiert wird
marriages %>% dplyr::pull(name)
Achtung: - EINFACHE eckige Klammern marriages["name"]
geben ein data.frame zurück (REDUZIEREN die
aktuelle Datenstruktur), während - DOPPELTE eckige Klammern
marriages[["name"]] den vector der Spalte
name zurückgeben (also das benannte Element
EXTRAHIEREN)!
Datentypen
Welche Datentypen haben die Spalten des Datensatzes?
-
name:character -
age:numericalso generell “Zahlen”- entspricht i.d.R.
doubleist eine Unterart vonnumeric, die auch Kommazahlen enthält. -
integerwäre auch möglich, abernumericist der Standarddatentyp für Zahlen in R. - wenn wir explizit Ganzzahlen definieren wollen, müssen
diese mit einem “L” versehen werden, z.B.
25L, oder die Spalte explizit alsintegerdefinier/umgewandelt werden, z.B.as.integer(c(25, 30, 35)).
- entspricht i.d.R.
-
married:logical
Aufbau
Wieviele Beobachtungen und Variablen hat der Datensatz?
- Beobachtungen: 4 = Anzahl Zeilen (oder Länge der Spalten)
- Variablen: 3 = Anzahl Spalten
Um zu verdeutlichen, worin der Unterschied zwischen
data.frame und tibble besteht, führen sie
folgende Code in einer R-Session aus:
R
# Erstellen eines data.frame
data.frame( "das sind daten" = c(1, 2, 3), "das sind auch daten" = c(4, 5, 6) )
# Erstellen eines äquivalenten tibbles
tibble::tibble( "das sind daten" = c(1, 2, 3), "das sind auch daten" = c(4, 5, 6) )
Unterschiede
Was fällt ihnen auf?
AUSGABE
das.sind.daten das.sind.auch.daten
1 1 4
2 2 5
3 3 6
AUSGABE
# A tibble: 3 × 2
`das sind daten` `das sind auch daten`
<dbl> <dbl>
1 1 4
2 2 5
3 3 6
- Spaltennamen in
data.framewerden automatisch bereinigt, damit sie den normalen Konventionen für Variablennamen entsprechen, z.B. Leerzeichen werden durch Punkte ersetzt. -
tibblezeigt die Spaltennamen so an, wie sie eingegeben wurden, und unterstützen auch Sonderzeichen in den Spaltennamen.- beachten Sie, dass Sonderzeichen in Spaltennamen in R nicht empfohlen werden, da sie zu Problemen führen können.
- ausserdem müssen solche Spaltennamen später in der Verwendung in backtick “`” quotes gesetzt werden, siehe oben
- ausserdem (hier nicht zu sehen) zeigt
tibblenur die ersten 10 Zeilen an, währenddata.framealle Zeilen anzeigt. - zudem werden die Datentypen für jede Spalte in
tibbleangezeigt, was beidata.framenicht der Fall ist.
- Spalten in einem
tibblewerden auch Variablen (des Datensatzes) genannt.- Eine Spalte ist ein
vector, d.h. es können nur Werte des gleichen Datentyps enthalten sein.
- Eine Spalte ist ein
- Zeilen in einem
tibblewerden auch Beobachtungen (des Datensatzes) genannt. - Ein Datensatz ist “tidy”,
- wenn jede Zeile einem Datensatz und jede Spalte einer Variable entspricht.
- Vereinfacht: wenn man beim Visualisieren der Daten nur jeweils eine Zeile pro Datenpunkt benötigt und keine doppelt verwendet wird.
Dieses Dokument wurde mit Unterstützung von GitHub Copilot erstellt, einem KI-gestützten Autocompletion-Tool, das auf der OpenAI GPT-3-Technologie basiert.