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:
<- c(39, 49, 63, 44, 40)
alter
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:
2]
letters[## [1] "b"
2:3]
letters[## [1] "b" "c"
-2]
letters[## [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:
<- list(name="Till", plz=60326, x=list(TRUE, TRUE, FALSE))
profil 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.