1 Datenstrukturen

Author

Claudia Spannbauer

Datenstrukturen in R - Übersicht

1. Vektoren (Vectors)

Definition: Vektoren sind die grundlegendste Datenstruktur in R. Sie enthalten eine Sequenz von Elementen des gleichen Datentyps.

Verwendung:

# Numerische Vektoren
zahlen <- c(1, 2, 3, 4, 5)
decimal <- c(1.5, 2.7, 3.14)

# Character Vektoren
namen <- c("Anna", "Bob", "Charlie")

# Logische Vektoren
wahrheit <- c(TRUE, FALSE, TRUE)

# Zugriff auf Elemente
zahlen[1]      # Erstes Element
[1] 1
zahlen[1:3]    # Erste drei Elemente
[1] 1 2 3

Weiterlesen: Vektoren zu Vektor und Faktor kombinieren

2. Listen (Lists)

Definition: Listen können Elemente verschiedener Datentypen enthalten und sind rekursiv (können andere Listen enthalten).

Verwendung:

# Liste erstellen
meine_liste <- list(
  zahlen = c(1, 2, 3),
  text = "Hallo Welt",
  logik = TRUE,
  matrix = matrix(1:6, nrow = 2)
)

# Zugriff auf Listenelemente
meine_liste$zahlen      # Mit $
[1] 1 2 3
meine_liste[[1]]        # Mit Index
[1] 1 2 3
meine_liste[["zahlen"]] # Mit Namen
[1] 1 2 3

Weiterlesen:

3. Mode

Definition: Mode beschreibt den grundlegenden Typ der Daten, die in einem Objekt gespeichert sind.

Verwendung:

# Verschiedene Modi
mode(c(1, 2, 3))        # "numeric"
[1] "numeric"
mode(c("a", "b"))       # "character"
[1] "character"
mode(c(TRUE, FALSE))    # "logical"
[1] "logical"
mode(list(1, 2, 3))     # "list"
[1] "list"
# Mode prüfen
is.numeric(c(1, 2, 3))  # TRUE
[1] TRUE
is.character("text")    # TRUE
[1] TRUE

4. Class

Definition: Class ist ein Attribut, das die objektorientierte Struktur eines Objekts definiert und bestimmt, wie Funktionen damit umgehen.

Verwendung:

# Class bestimmen
x <- c(1, 2, 3)
class(x)                # "numeric"
[1] "numeric"
# Class setzen
class(x) <- "meine_klasse"
class(x)                # "meine_klasse"
[1] "meine_klasse"
# Für verschiedene Objekte
class(data.frame())     # "data.frame"
[1] "data.frame"
class(matrix(1:4, 2))   # "matrix" "array"
[1] "matrix" "array" 

5. Scalare

Definition: Scalare sind einzelne Werte (technisch gesehen Vektoren der Länge 1 in R).

Verwendung:

# Verschiedene Scalar-Typen
zahl <- 42
text <- "Einzelwort"
wahrheit <- TRUE

# Prüfung auf Länge
length(zahl)    # 1
[1] 1
is.vector(zahl) # TRUE
[1] TRUE

6. Matrices

Definition: Matrices sind zweidimensionale Arrays mit Elementen des gleichen Datentyps, organisiert in Zeilen und Spalten.

Verwendung:

# Matrix erstellen
mat1 <- matrix(1:12, nrow = 3, ncol = 4)
mat2 <- matrix(1:12, nrow = 3, byrow = TRUE)

# Mit Zeilen- und Spaltennamen
dimnames(mat1) <- list(
  c("Zeile1", "Zeile2", "Zeile3"),
  c("Sp1", "Sp2", "Sp3", "Sp4")
)

# Zugriff auf Elemente
mat1[1, 2]          # Element in Zeile 1, Spalte 2
[1] 4
mat1[1, ]           # Erste Zeile
Sp1 Sp2 Sp3 Sp4 
  1   4   7  10 
mat1[, 2]           # Zweite Spalte
Zeile1 Zeile2 Zeile3 
     4      5      6 

7. Arrays

Definition: Arrays sind mehrdimensionale Verallgemeinerungen von Matrices mit mehr als zwei Dimensionen.

Verwendung:

# 3-dimensionales Array
arr <- array(1:24, dim = c(3, 4, 2))

# Mit Dimensionsnamen
dimnames(arr) <- list(
  Zeilen = c("Z1", "Z2", "Z3"),
  Spalten = c("S1", "S2", "S3", "S4"),
  Schichten = c("Schicht1", "Schicht2")
)

# Zugriff auf Elemente
arr[1, 2, 1]        # Spezifisches Element
[1] 4
arr[, , 1]          # Erste Schicht
      Spalten
Zeilen S1 S2 S3 S4
    Z1  1  4  7 10
    Z2  2  5  8 11
    Z3  3  6  9 12

8. Factors

Definition: Factors repräsentieren kategoriale Daten mit vordefinierten Levels (Kategorien).

Verwendung:

# Factor erstellen
geschlecht <- factor(c("m", "w", "w", "m", "m"))
levels(geschlecht)  # Zeigt Kategorien
[1] "m" "w"
# Mit benutzerdefinierten Levels
noten <- factor(
  c("gut", "schlecht", "mittel", "gut"),
  levels = c("schlecht", "mittel", "gut"),
  ordered = TRUE
)

# Factor-Eigenschaften
is.factor(geschlecht)   # TRUE
[1] TRUE
nlevels(geschlecht)     # Anzahl der Levels
[1] 2
table(geschlecht)       # Häufigkeitstabelle
geschlecht
m w 
3 2 

9. Data Frames

Definition: Data Frames sind zweidimensionale Strukturen, die Spalten verschiedener Datentypen enthalten können (wie Tabellen in Datenbanken).

Verwendung:

# Data Frame erstellen
df <- data.frame(
  Name = c("Anna", "Bob", "Charlie"),
  Alter = c(25, 30, 35),
  Verheiratet = c(TRUE, FALSE, TRUE),
  stringsAsFactors = FALSE
)

# Zugriff auf Daten
df$Name             # Spalte über Namen
[1] "Anna"    "Bob"     "Charlie"
df[1, ]             # Erste Zeile
  Name Alter Verheiratet
1 Anna    25        TRUE
df[, "Alter"]       # Spalte über Namen
[1] 25 30 35
df[df$Alter > 28, ] # Bedingte Auswahl
     Name Alter Verheiratet
2     Bob    30       FALSE
3 Charlie    35        TRUE
# Informationen über Data Frame
str(df)             # Struktur anzeigen
'data.frame':   3 obs. of  3 variables:
 $ Name       : chr  "Anna" "Bob" "Charlie"
 $ Alter      : num  25 30 35
 $ Verheiratet: logi  TRUE FALSE TRUE
summary(df)         # Zusammenfassung
     Name               Alter      Verheiratet    
 Length:3           Min.   :25.0   Mode :logical  
 Class :character   1st Qu.:27.5   FALSE:1        
 Mode  :character   Median :30.0   TRUE :2        
                    Mean   :30.0                  
                    3rd Qu.:32.5                  
                    Max.   :35.0                  

Weiterlesen:

10. Tibbles

Definition: Tibbles sind eine moderne Variante der Data Frames aus dem tidyverse-Paket, mit verbessertem Verhalten und besserer Ausgabe.

Verwendung:

# Tibble erstellen (benötigt tibble-Paket)
library(tibble)

tbl <- tibble(
  Name = c("Anna", "Bob", "Charlie"),
  Alter = c(25, 30, 35),
  Verheiratet = c(TRUE, FALSE, TRUE)
)

# Oder aus Data Frame konvertieren
tbl2 <- as_tibble(df)

# Vorteile von Tibbles:
# - Bessere Ausgabe (zeigt nur erste 10 Zeilen)
# - Warnt bei problematischen Operationen
# - Behält Datentypen besser bei
# - Unterstützt unkonventionelle Spaltennamen

# Zugriff funktioniert wie bei Data Frames
tbl$Name
[1] "Anna"    "Bob"     "Charlie"
tbl[1, ]
# A tibble: 1 × 3
  Name  Alter Verheiratet
  <chr> <dbl> <lgl>      
1 Anna     25 TRUE       

Zusammenfassung der Beziehungen

  • Vektoren sind die Basis aller anderen Strukturen
  • Listen können verschiedene Datentypen kombinieren
  • Matrices und Arrays sind für numerische Berechnungen optimiert
  • Factors behandeln kategoriale Daten effizient
  • Data Frames sind ideal für gemischte Datentypen in Tabellenform
  • Tibbles bieten eine verbesserte Version der Data Frames
  • Mode und Class beschreiben die Eigenschaften aller Objekte

Wahl der richtigen Datenstruktur

  • Verwende Vektoren für homogene Datensequenzen
  • Verwende Listen für heterogene Datensammlungen
  • Verwende Matrices für numerische 2D-Berechnungen
  • Verwende Arrays für mehrdimensionale numerische Daten
  • Verwende Factors für kategoriale Variablen
  • Verwende Data Frames für tabellarische Daten mit gemischten Typen
  • Verwende Tibbles wenn du mit dem tidyverse arbeitest