
Data Science 1 - Programmieren & Visualisieren
Saskia Otto & Monika Eberhard
Universität Hamburg, IMF
Wintersemester 2025/2026
![]()

Zur Erinnerung
Eine Variable ist eine Möglichkeit, um im Programm eine Zahl, ein Zeichen oder Zeichenkette oder einen boolschen Wert (wahr oder falsch) zu speichern.
<-:Über den Namen kann auf den Inhalt zugegriffen werden:

Einzelne Variablen, Objekte und Funktionen lassen sich aus dem Arbeitsbereich mit rm() und dem entsprechenden Namen löschen:
Sie können die Liste aller Objekte des Arbeitsbereichs auch in der Konsole anzeigen lassen mit ls():
→ Wie Sie sehen, ist logisch2 nicht mehr gelistet, nachdem es gelöscht wurde.
Das Datum (date) und Faktoren (factor) stellen zusammengesetzte Datentypen dar.
| Datentyp | Definition | Variablentyp | Skalenniveau |
|---|---|---|---|
| logical | Logische (Boolean) Werte (TRUE oder FALSE) |
kategorial | nominalskaliert |
| integer | Natürliche ganze Zahlen | quantitativ (diskret) | ordinal-/intervall-/verhältnisskaliert |
| double | Gleitkommazahl | quantitativ (kontinuierlich) | intervall-/verhältnisskaliert |
| numeric | Alle Zahlen (integer und double) | quantitativ | |
| complex | Komplexe Zahlen (z.B. 5i) | quantitativ | |
| character | Zeichen (oder Zeichenkette) | qualitativ/kategorial | nominalskaliert |
| NULL | leerer Inhalt |
typeof()is.xxx()Diese Funktionen geben ein TRUE oder FALSE zurück:
as.xxx()![]()
01:30
![]()
![]()
![]()
Bevor auf my_value in Zeile 2 zugegriffen werden kann, muss das Skalar erstmal definiert werden. Dies geschieht mit dem Zuweisungsoperator (<-).
Anschl. muss eine Funktion aufgerufen werden, die einen logischen Wert zurückgibt. Dies kann nur eine der is.xxx Funktionen sein. Welchen Datentyp könnte ‘A1’ haben?

c() verschachtelt:length() und str() ermittelt werden kann:![]()
01:00
![]()
![]()

Implizierte Datentyp-Umwandlung (‘coercion’)
Handling von Vektoren unterschiedlicher Länge (‘recycling’)
Namen für Elemente in Vektoren
Extrahieren von Elementen bzw. Teilmengen bilden (Indexierung oder ‘indexing’)
TRUE zu einer 1 und FALSE wird zu 0.sum() und mean() sehr nützlich sein:Alle Elemente in Objekten können Namen erhalten - auch in Vektoren:
c()names().[...] ist die Funktion mit der Vektoren indexiert werden.neuer_vektor <- alter_vektor[auswahl].Ausschluss von Elementen
![]()
Die Positionsangabe erfolgt über eine Ganzzahl oder einen numerischen Vektor mit Ganzzahlen. Der Index startet immer mit 1.
[1] "zwei"
[1] "eins" "drei" "vier" "fünf"
[1] "fünf" "eins" "drei"
[1] "zwei" "vier"
[1] "eins" "zwei" "drei"
[1] "drei" "zwei" "eins"
[1] "eins" "eins" "zwei" "zwei" "drei" "drei" "drei" "drei"
Vektor[Abfrage]) mittels Vergleichs- und Verknüpfungsoperatoren oder Funktionen, die auch TRUE/FALSE zurückgeben:NA angezeigt (= ‘not available’).NA nimmt immer den Datentyp der anderen Elemente an, auch wenn das meist nicht sichtbar ist.is.na() kann geprüft werden, ob ein Element ein NA, um sich anschl. die Summe aller NAs ausgeben zu lassen.![]()
01:30
![]()
![]()
![]()
Ein Vektor x enthält 20 verschiedene Elemente.

Vergleichs- und Verknüpfungsoperatoren geben immer einen logischen Wert (TRUE oder FALSE) zurück.

| Operator | Anwendung | Beschreibung |
|---|---|---|
| < | a < b | a ist KLEINER als b |
| > | a > b | a ist GRÖSSER als b |
| == | a == b | a ist GLEICH wie b |
| <= | a <= b | a ist KLEINER als oder GLEICH wie b |
| >= | a >= b | a ist GRÖSSER als oder GLEICH wie b |
| != | a!=b | a ist NICHT GLEICH wie b |

| Operator | Anwendung | Beschreibung |
|---|---|---|
| & | a & b | Elementweise UND Operation (arbeiten mit Vektoren) |
| | | a | b | Elementweise ODER Operation (arbeiten mit Vektoren) |
| ! | !a | Elementweise NICHT Operation (arbeiten mit Vektoren) |

Warum 4 Werte???
Berechnungen in R sind vektorisiert, d.h. die Berechnung wird auf jedes einzelne Element des Vektors angewendet.
Gegeben ist eine Messreihe der Spinnendichte (\(no./m^2\)) auf verschiedenen Inseln im Golf von Kalifornien aus dem Jahre 1992 (aus Studie von Polis et al., 1998).

Nun soll der proportionale Anteil der Dichte pro Insel berechnet werden: \(p_i=\frac{d_i}{\sum(d_i)}\)


![]()

… im swirl-Kurs werden Sie direkt an die Hand genommen und Stück für Stück angeleitet.
Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz…
![]()
![]()
Der Skalar n in der letzten Operation wurde vorher nicht definiert. Daher muss sich die vorherige Zuweisung auf dieses Skalar beziehen. Auch y wurde vorher nicht definiert, daher kann es sich beim ‘Grösser’-Zeichen in in der letzten Zeile nicht um einen Vergleichsoperator handeln, sondern muss der erste Teil des Zuweisungsoperators sein.
Eine Zeichenkette (in diesem Fall ‘a’) hat keine korrespondierende Zahl, in die es umgewandelt werden kann. Dagegen kann eine Zahl einfach in eine Zeichenkette umgewandelt werden.
In diesem Fall ist 1 klar als ‘integer’ definiert, daher wird das TRUE zum ‘integer’ umgewandelt.
Alle TRUEs werden zu 1 umgewandelt und alle FALSEs zu 0. Summiere einfach den Vektor mit der sum() Funktion: sum(x)
Wie könnten alle NAs in einem Vektor x mit sehr vielen Elementen schnell ermittelt werden?
Zuerst wird mit der is.na() Funktion bei jedem Element abgefragt, ob es sich um ein NA handelt oder nicht.
Anschließend kann mit dem zurückgegebenen logischen Vektor die Summe aller TRUEs berechnet werden - denn R wandelt bei mathematischen Operationen von logischen Werten alle FALSEs in eine 0 um und alle TRUEs in eine 1!
Ein Vektor x enthält 20 verschiedene Elemente.
Ein Vektor x enthält 20 verschiedene Elemente.
Ein Vektor vec enthält mehrere Zahlen.
Wir nutzen dazu den Modulo-Operator, welcher eine Restwert-Division zweier Elemente ausführt. Bei der Restwert-Division von 43 (Dividend) durch 5 (Divisor) wird z.B. gefragt, wie man die Zahl 43 als Vielfaches von 5 und einem kleinen Rest darstellen kann: \(43=5*c+r\) In diesem Beispiel wäre die 4 der sog. Ganzzahlquotient c und die 3 der Restwert r.
Ein Rest ungleich 0 ergibt sich folglich genau dann, wenn der Dividend kein Vielfaches des Divisors ist. Man sagt auch: Der Dividend ist nicht durch den Divisor teilbar, weshalb ein Rest übrigbleibt.
Dies können wir uns zunutze machen, indem wir als Divisor die 2 nehmen. Wenn kein Restbetrag übrig bleibt, muss der Dividend gerade sein!
Ein Vektor vec enthält mehrere Zahlen.
Ein numerischer Vektor nvec enthält eine unbekannte Anzahl an Elementen.
Der kürzere Vektor 1:3 wird durch das recyceln der eigenen Werte auf die gleiche Länge wie der erste Vektor gebracht (=6): c(1,2,3,1,2,3).
Nun wird das 5. Element (=2) mit dem 5.Element des 1. Vektors (=10) multipliziert.
Zur Erinnerung die Formel der Varianz: \(s^{2} = \frac{\sum\limits_{i=1}^{n} \left(x_{i} - \bar{x}\right)^{2}} {n-1}\)
df im Quiz steht für ‘degrees of freedom’, was im Deutschen die Freiheitsgrade sind. Und die betragen bei der Varianz n-1 (die Stichprobengröße oder Länge des Vektors minus 1).
Bei der Teilanweisung x-mean_x wird der eine Wert in mean_x auf die Länge von x recycelt. Anschl. wird der 1. Wert in mean_x vom 1. Wert in x, abgezogen, dann der zweite Wert, etc.
Das Ergebnis ist ein Vektor der gleichen Länge wie x mit den Differenzen, die anschl. quadriert und aufsummiert werden.
Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.
Kurswebseite: Data Science 1