Sitzung 3 Datenstrukturen

3.1 Lernziele dieser Sitzung

Sie können…

  • die verschiedenen Strukturen für Datensätze in R benennen.
  • Vektoren generieren.
  • einfache Befehle mit Vektoren durchführen.
  • Beispieldatensätze aufrufen und beschreiben.

3.2 Vektoren

Vektoren (engl. vectors) sind eindimensionale Reihen von Werten gleichen Typs. Sie bilden einen wichtigen Baustein von R und von den hier im Seminar besprochenen Inhalten.

Sie können manuell mit der Funktion c(...) erstellt werden und wie Variablen benannt werden:

alter <- c(39, 49, 63, 44, 40)
alter
## [1] 39 49 63 44 40

Es gibt darüber hinaus aber auch Möglichkeiten, Vektoren automatisch zu generieren:

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(100, 10, by=-10)
##  [1] 100  90  80  70  60  50  40  30  20  10

Buchstaben sind als Vektor in R eingebaut:

letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
LETTERS
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"

Manche Funktionen sind speziell für Vektoren gedacht:

rev(1:10)
##  [1] 10  9  8  7  6  5  4  3  2  1

Andere Funktionen, die für einzelne Werte gedacht sind, werden für jeden Wert einzeln ausgeführt:

toupper("hallo")
## [1] "HALLO"
toupper(c("ein", "paar", "strings"))
## [1] "EIN"     "PAAR"    "STRINGS"

Elemente von Vektoren können mit eckigen Klammern einzeln oder selektiv angesprochen bzw entfernt werden:

letters[2]
## [1] "b"
letters[2:3]
## [1] "b" "c"
letters[-2]
##  [1] "a" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
## [20] "u" "v" "w" "x" "y" "z"

Vektoren können wie Variablen benutzt werden:

2018 - alter
## [1] 1979 1969 1955 1974 1978
paste(alter, "ist ein gutes Alter")
## [1] "39 ist ein gutes Alter" "49 ist ein gutes Alter" "63 ist ein gutes Alter"
## [4] "44 ist ein gutes Alter" "40 ist ein gutes Alter"

length(x) gibt die Anzahl der Elemente in einem Vektor x aus:

length(alter)
## [1] 5

Von Verteilungen, die als Vektoren vorliegen, lassen sich statistische Parameter einfach errechnen:

mean(alter)
## [1] 47
median(alter)
## [1] 44
sd(alter)
## [1] 9.77241
IQR(alter)
## [1] 9

(Aber IQR() berechnet anders als in der Vorlesung besprochen!)

Wir können den Mittelwert auch mit Hilfe der sum() und length() Funktionen selbst berechnen:

sum(alter) / length(alter)
## [1] 47

3.3 Matritzen

Matritzen (engl. matrix) sind zweidimensionale Reihen von Werten gleichen Typs.

matrix(1:15, nrow=3)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4    7   10   13
## [2,]    2    5    8   11   14
## [3,]    3    6    9   12   15

Sie spielen in diesem Seminar aber keine große Rolle.

3.4 Listen

Listen sind eindimensionale Reihen von Werten, wobei der Typ egal ist:

list("Hallo", 10, F)
## [[1]]
## [1] "Hallo"
## 
## [[2]]
## [1] 10
## 
## [[3]]
## [1] FALSE

Dabei können die Werte benannt sein, und Listen können Unterlisten enthalten:

profil <- list(name="Till", plz=60326, x=list(TRUE, TRUE, FALSE))
str(profil)
## List of 3
##  $ name: chr "Till"
##  $ plz : num 60326
##  $ x   :List of 3
##   ..$ : logi TRUE
##   ..$ : logi TRUE
##   ..$ : logi FALSE

3.5 Data Frames

Data frames sind tabellarische Daten. Die Werte in jeder Spalte haben dabei denselben Typ.

Viele Beispieldatensätze sind in Form von data frames in R eingebaut.

head(x) gibt nur die ersten sechs Zeilen aus:

head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

3.6 Tibbles

Tibbles können alles, was data frames können, und haben darüber hinaus noch Funktionen, die wir später kennenlernen werden.

Sie sind teil der Paketsammlung tidyverse, die einmalig installiert werden muss und dann geladen werden kann:

library(tidyverse)

Ein Beispieldatensatz ist diamonds:

data(diamonds)

Einzelne Spalten lassen sich mit $ ansprechen und verhalten sich dann wie Vektoren:

str(diamonds$carat)
##  num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
mean(diamonds$depth)
## [1] 61.7494

3.7 Aufgaben

3.7.1 Vektoren

  • Generieren Sie die folgenden Vektoren (und seien Sie dabei möglichst faul).
## [1]  TRUE FALSE FALSE
##  [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
## [13]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
##  [1]  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 34
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
##  [1] "Z" "Y" "X" "W" "V" "U" "T" "S" "R" "Q" "P" "O" "N" "M" "L" "K" "J" "I" "H"
## [20] "G" "F" "E" "D" "C" "B" "A"
##  [1] "aA" "bB" "cC" "dD" "eE" "fF" "gG" "hH" "iI" "jJ" "kK" "lL" "mM" "nN" "oO"
## [16] "pP" "qQ" "rR" "sS" "tT" "uU" "vV" "wW" "xX" "yY" "zZ"
  • Wandeln Sie die Typen der ersten drei obigen Vektoren um:
## [1] 1 0 0
##  [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
##  [1] "2"  "4"  "6"  "8"  "10" "12" "14" "16" "18" "20" "22" "24" "26" "28" "30"
## [16] "32" "34"

3.7.2 Tibbles

  • Schauen Sie sich den Beispieldatensatz faithful an.
  • Wandeln Sie den Datensatz faithful in einen tibble um.
  • Wenden Sie str() auf den Datensatz an. und Interpretieren Sie das Ergebnis.
  • Erstellen Sie einen eigenen tibble mit Vornamen, Nachnamen und Alter von (ausgedachten?) Menschen.
  • Lassen Sie sich nur die zweite Zeile des tibbles diamonds anzeigen
  • Lassen Sie sich nur jede zweite Zeile des tibbles diamonds anzeigen

3.7.3 Statistik

  • Berechnen Sie die durchschnittliche Eruptionszeit im Datensatz faithful (als tibble).
  • Berechnen Sie Varianz und Standardabweichung der Karatzahl im Beispieldatensatz diamonds
  • Was sagen die einzelnen Kennzahlen des Befehls summary(x) aus?

3.7.4 Swirl

Absolvieren Sie die folgenden Swirl-Lektionen (Anleitung zu Swirl s. letzte Lektion):

  • 3: Sequences of Numbers
  • 4: Vectors
  • 5: Missing Values
  • 6: Subsetting Vectors

3.7.5 Recherche

  • Nach welcher Methode berechnet R den Quartilsabstand einer Verteilung (im Unterschied zur Vorlesung)?
  • Finden Sie fünf Befehle, die mit tibbles funktionieren, aber nicht mit data frames.
  • Welche Pakete sind Teil des tidyverse? Wofür sind sie gedacht?
  • Lesen Sie die Hilfe zu tibble::tibble. Recherchieren Sie eigenständig unklare Begriffe.

3.7.6 Kniffliges

  • Kehren Sie auf möglichst elegante und allgemeingültige Weise die Reihenfolge eines Vektors um, ohne die Funktion rev() zu benutzen.