7  Vektoren

Bisher haben wir mit einzelnen Werten gearbeitet. Beispielsweise haben wir in der Variable my_var nur den einzelnen Wert \(5\) gespeichert:

my_var <- 5

Sehr häufig wollen wir jedoch mit vielen Werten gleichzeitig arbeiten. Angenommen wir haben bei einem Patienten den Y-BOCS durchgeführt. Der Y-BOCS ist ein Verfahren zur Erhebung von Zwangs-Symptomen mit 10 Fragen. Für jede Frage bekommen die Patient:innen einen Wert zwischen 0 und 4 zugeordnet. Wenn die Summe über alle 10 Fragen über 16 liegt, spricht man von klinisch signifikanten Zwangssymptomen (Farris et al., 2013). Wir könnten die 10 Werte des Patienten folgendermaßen erfasst:

ybocs_frage_1  <- 3
ybocs_frage_2  <- 4
ybocs_frage_3  <- 2
ybocs_frage_4  <- 0
ybocs_frage_5  <- 2
ybocs_frage_6  <- 0
ybocs_frage_7  <- 3
ybocs_frage_8  <- 2
ybocs_frage_9  <- 1
ybocs_frage_10 <- 1

Berechne die Summe der 10 Y-BOCS Fragen.

Lösung anzeigen
ybocs_summe <- ybocs_frage_1 + ybocs_frage_2 + ybocs_frage_3 + ybocs_frage_4 + 
               ybocs_frage_5 + ybocs_frage_6 + ybocs_frage_7 + ybocs_frage_8 + 
               ybocs_frage_9 + ybocs_frage_10
ybocs_summe
[1] 18

Jeden Wert in einer eigenen Variable zu speichern ist furchtbar aufwendig. Vektoren nehmen uns hier sehr viel Arbeit ab. Diese sind im Prinzip einfach nur eine Aneinanderreihung von Werten. In R erstellen wir diese Aneinanderreihungen mit c() für “combine”. Die einzelnen Werte werden mit Kommata getrennt:

my_vector <- c(1,2,6,4)

Falls Du Vektoren noch aus dem Mathe-Unterricht kennst: Wir können uns my_vec folgendermaßen vorstellen: my_vec = [1 2 6 4].

Erstelle einen Vektor mit dem Namen ybocs und speichere die oben genannten 10 Y-BOCS Werte des Patienten in diesem Vektor.

Lösung anzeigen
ybocs <- c(3, 4, 2, 0, 2, 0, 3, 2, 1, 1)

Du kannst Dir den Inhalt des Vektors auch anzeigen lassen, indem Du print(ybocs) ausführst.

print(ybocs)
 [1] 3 4 2 0 2 0 3 2 1 1

Auf Vektoren können wir nun Funktionen anwenden. Was Funktionen sind, werden wir später lernen. Hier kommt schon mal ein Vorgeschmack: Wenn wir die Summe der Y-BOCS Werte berechnen wollen, geht dies ganz einfach mit

sum(ybocs)
[1] 18

7.1 Elemete aus einem Vektor herausgreifen

Wenn wir nun wissen wollen, welchen Wert der Patient auf der ersten Frage hat, können wir eckige Klammern nutzen:

ybocs[1] # Der Wert in der Klammer ist die Frage, für die wir den Wert wissen wollen
[1] 3

Greife nun den Wert der 7. Frage heraus.

Lösung anzeigen
ybocs[7]
[1] 3

Was passiert, wenn Du versuchst auf den 75. Wert zuzugreifen?

Lösung anzeigen
ybocs[75]
[1] NA
Wir bekommen ein NA (“Not Available”). R sagt uns also, dass der Wert nicht existiert!

Wir können auch auf mehrere Werte auf einmal zugreifen. Hierfür müssen wir einen Vektor an Werten in die eckigen Klammern schreiben:

ybocs[c(1,4,5)] # wir holen uns hier die Werte 
[1] 3 0 2
# der ersten, vierten und fünften Frage

Beachte das c() um die Werte!

7.2 Vektoren ändern

Wir können mit den eckigen Klammern nicht nur einzelne Werte anschauen sondern diese auch ändern:

ybocs[3] <- 1234
print(ybocs)
 [1]    3    4 1234    0    2    0    3    2    1    1

Ändere den fünften Wert zu NA!

Lösung anzeigen
ybocs[5] <- NA
print(ybocs)
 [1]    3    4 1234    0   NA    0    3    2    1    1

7.3 Verschiedene Datentypen

Wir können in Vektoren immer nur Daten eines Typs speichern. Oben haben wir beispielsweise nur Zahlen im Vektor ybocs gespeichert. Wir können auch Text in einem Vektor speichern:

text_vector <- c("abc", "def", "ghi")
Was passiert, wenn man Text und Zahlen mischt? Probiere es aus!
Lösung anzeigen
mix_vector <- c(123, "def", "ghi")
print(mix_vector)
[1] "123" "def" "ghi"
Die Zahl 123 wurde automatisch in einen Text übersetzt! Das sehen wir daran, dass um die Zahl nun Anführungszeichen stehen ("123").

Die einzige Ausnahme sind NA. Fehlende Werte können wir mit allen anderen Datentypen mischen.

Wenn wir verschiedene Datentypen kombinieren wollen, brauchen wir data.frames und Listen. Die schauen wir uns in späteren Kapiteln genauer an.