3.1 Datentypen
Im folgenden werden die vier grundlegenden Datentypen (atomic vectors) behandelt:
logical
(TRUE, FALSE)integer
(c(1, 2.4, 4.678))double
(auch alsnumeric
bezeichnet; c(1L, 2L, 3L))character
(c(“these are”, “some strings”))
Diese Datentypen können in Form bestimmter Datenstrukturen miteinander verknüft werden. In R ist dies über die Dimensionalität der Daten definiert mit den fünf häufigsten Strukturen:
Homogen | Heterogen | |
---|---|---|
1d | Atomic vector | List |
2d | Matrix | Data frame |
nd | Array |
3.1.1 Numerische Objekte
Zahlenwerte in R werden als numeric
bezeichnet mit der Unterteilung in integer
(ganze Zahlen) oder double
(Dezimalzahlen). Die Zuweisung von R, selbst wenn ich eine ganze Zahl zuweise, ist jedoch vom Typ double.
<- 4
a typeof(a)
## [1] "double"
💡 Mit der Funktion typeof()
kann der Objekttyp erfragt werden.
Um eine ganze Zahl wiederzugeben muss ein L hinter die Zahl gesetzt werden.
<- 4L
a typeof(a)
## [1] "integer"
3.1.2 Textobjekte
Ein character
Objekt sind Namen wie "Kristof"
, "Tim"
, "Beste Norddeutschland Exkursion der Welt"
(Textvariablen werden auch als string bezeichnet). Um ein character
Objekt zu definieren sind die Anführungsstriche als einfache ' '
oder doppelte " "
Anführungszeichen wichtig!
# Dies sind alles character Objekte
"Kristof"
## [1] "Kristof"
"Tim"
## [1] "Tim"
"Beste Norddeutschland Exkursion der Welt"
## [1] "Beste Norddeutschland Exkursion der Welt"
Bestimmte Funktionen brauchen einen numerical input, wohingegen andere einen character input benötigen. Schaue was passiert:
mean(c("5", "1"))
Warnmeldung:In mean.default(c(“5”, “1”)) :Argument ist weder numerisch noch boolesch: gebe NA zurück
Lasse ich die Anführungsstriche weg, dann ist wieder alles im Lot:
mean(c(5, 1))
## [1] 3
3.1.3 Logicals
Der dritte wichtige Objekttyp in R lautet logical
und dieser kann zwei Werte annehmen: TRUE
(wahr) und FALSE
(falsch). Logicals entstehen durch den logischen Vergleich zwischen zwei Werten oder den Elementen eines Vektors. Operatoren die für diese Anfrage genutzt werden können lauten:
Operator | Bedeutung | Beispiel |
---|---|---|
== | ist gleich | 1==1 (ergibt TRUE ) “a”==“b” (ergibt FALSE ) |
!= | ist nicht gleich | 1 != 1 (ergibt FALSE ) “a” != “b” (ergibt TRUE ) |
< | ist kleiner als | 1 < 2 (ergibt TRUE ) 2 < 2 (ergibt FALSE ) |
> | ist größer als | 2 > 1 (ergibt TRUE ) 2 > 2 (ergibt FALSE ) |
<= | ist kleiner gleich | 1 <= 2 (ergibt TRUE ) 2 <= 2 (ergibt TRUE ) |
>= | ist größer gleich | 2 >= 1 (ergibt TRUE ) 2 >= 2 (ergibt TRUE ) |
3.1.4 Fehlende Werte
In R werden fehlende Werte mit NA
für not available
gekennzeichnet. Für bestimmte Funktionen und Anwendungen ist es wichtig, falls ein NA
Wert in einer Zeitreihe auftritt (🤯 …leider ist dies in langen Zeitreihen fast immer der Fall), R explizit zu sagen was mit diesen Werten getan werden soll.
# Ich habe einen Vektor mit einem fehlenden Wert NA
<- c(1,2,3,4,NA,5)
a mean(a)
## [1] NA
Hm…der Mittelwert von 1,2,3,4,NA und 5 ist NA und nicht eine Zahl? Wie kommt das bloß. In dem Fall ist es nützlich in die Dokumentation der Funktion mean()
nachzuschauen.
?mean
Default S3 method: mean(x, trim = 0, na.rm = FALSE, …)
Die default Argumente der Funktion lauten na.rm = FALSE
, was soviel bedeutet na Werte nicht zu entfernen sondern in die Berechnung mit einzubeziehen.
💡 na steht für fehlende Werte (NA) und rm ist die Kurzform für remove, also entfernen.
Damit unsere Rechnung funktioniert müssen wir in der mean()
Funktion das Argument na.rm = TRUE
setzen, also erst die fehlende Werte entfernen und dann den Mittelwert berechnen:
mean(a, na.rm = TRUE)
## [1] 3
💪 Es funktioniert! Dies ist tatsächlich einer der häufigsten Fehler und egal wie häufig man daran denkt, es kommt immer wieder vor das dies einer der Gründe ist warum man sich Stunden den Kopf über ein nicht funktionierendes Skript zerbricht 🤯
3.1.5 Weitere Objekttypen
Neben den drei vermeintlich wichtigsten Objekttypen (numeric
, character
, logical
) gibt es in R noch die Typen für
- Kategoriale Variablen
factor
- Datumsangaben
date
- Datumsangaben + Zeit
datetime
- … und weitere
Wenn man Daten in R einliest muss man R jedoch einen Schubser geben, damit eine Spalte bspw. auch als date
erkannt wird und nicht als character
oder numeric
. Wie man dies berücksichtigt lernen wir in dem Kapitel Daten einlesen.
3.1.5.1 S3 Objekte
Vektoren in R weisen verschiedene Attribute auf. Die zwei wichtigsten Attribute sind:
- dimension (wandelt einen Vektor in eine Matrix oder Liste um)
- class (bedient S3 Objekte, bspw.
factor
,date
undPOSIXct
)
Wenn ein Objekt in R ein class Attribut besitzt wird es automatisch in ein S3 object umgewandelt und unterscheidet sich dadurch von einem normalen Vektor.
factor
sind bspw. aufgebaut aus den Attributen class
und levels
um kategorische Daten zu speichern.
3.1.6 Objekttypen ändern
Die Syntax in R um Objekte umzuwandeln lautet as.[Objekttyp]
.
<- "25"
a typeof(a)
## [1] "character"
<- as.numeric(a)
a typeof(a)
## [1] "double"
Dies klappt allerdings nur, insofern die Umwandlung logisch ist. In allen anderen Fällen gibt es eine Warnmeldung unter Erzeugung von NA
s anstelle der Werte.
<- as.numeric("Beste Norddeutschland Exkursion der Welt") a
## Warning: NAs introduced by coercion