9  Data.frames

Sowohl bei Vektoren als auch bei Matrizen haben wir festgestellt, dass wir immer nur einen bestimmten Datentyp (Text oder Zahlen) speichern können. Meistens haben wir jedoch dutzende Variablen in unserem Datensatz, von denen manche Zahlen sind und andere Text. Beispielsweise könnte der Y-BOCS Wert als Zahl, die Therapierichtung aber als Text gespeichert sein:

ybocs <- matrix(c(3, 4, 2, 0, 2, 0, 3, 2, 1, 1,
                  0, 4, 3, 4, 2, 2, 1, 2, 2, 4,
                  3, 4, 3, 3, 0, 3, 3, 3, 4, 0,
                  1, 3, 3, 0, 1, 3, 2, 0, 0, 3), 
                nrow = 4, 
                ncol = 10, 
                byrow = TRUE)
therapieform <- c("KVT", "PD", "PD", "KVT")

In echten Datensätzen hätten wir wahrscheinlich noch sehr viel mehr Variablen. Daher ist das Vorgehen oben extrem aufwendig, weil wir so unseren Datensatz auf zig unterschiedliche Variablen aufgeteilt würden.

Data.frames erlauben es uns, verschiedene Datentypen in einer einzigen Tabelle zu speichern. Um einen data.frame zu erstellen, können wir unsere ybocs-Variable nehmen und in den data.frame - Befehl werfen:

ybocs_df <- data.frame(ybocs)
print(ybocs_df)
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1  3  4  2  0  2  0  3  2  1   1
2  0  4  3  4  2  2  1  2  2   4
3  3  4  3  3  0  3  3  3  4   0
4  1  3  3  0  1  3  2  0  0   3

Wir können den Spalten auch etwas sinnvollere Namen geben, indem wir folgenden Code ausführen:

colnames(ybocs_df) <- c("frage 1", "frage 2", "frage 3", "frage 4", "frage 5",
                        "frage 6", "frage 7", "frage 8", "frage 9", "frage 10")

Wir können nun neue Variablen hinzufügen, indem wir das Dollar-Symbol nutzen:

ybocs_df$therapieform <- therapieform
print(ybocs_df)
  frage 1 frage 2 frage 3 frage 4 frage 5 frage 6 frage 7 frage 8 frage 9
1       3       4       2       0       2       0       3       2       1
2       0       4       3       4       2       2       1       2       2
3       3       4       3       3       0       3       3       3       4
4       1       3       3       0       1       3       2       0       0
  frage 10 therapieform
1        1          KVT
2        4           PD
3        0           PD
4        3          KVT

9.1 Auf Daten eines data.frame zugreifen

Um Daten herauszugreifen, können wir wieder eckige Klammern verwenden. Identisch zu Matrizen haben wir wieder Zeilen und Spalten. Wir müssen nun also sowohl die Zeile als auch die Spalte angeben, deren Element wir herausgreifen wollen:

ybocs_df[1,3] # ergibt das Element in der ersten Zeile, dritten Spalte
[1] 2

Was passiert, wenn Du folgenden Code ausführst?

ybocs_df[1,]
Lösung anzeigen
ybocs_df[1,]
  frage 1 frage 2 frage 3 frage 4 frage 5 frage 6 frage 7 frage 8 frage 9
1       3       4       2       0       2       0       3       2       1
  frage 10 therapieform
1        1          KVT
Wir bekommen die gesamte erste Zeile!

Was passiert, wenn Du folgenden Code ausführst?

ybocs_df[,1]
Lösung anzeigen
ybocs_df[,1]
[1] 3 0 3 1
Wir bekommen die gesamte erste Spalte!

Alternativ können wir Spaltennamen nutzen, um ganze Spalten herauszugreifen. Hierfür nutzen wir wieder das Dollar-Zeichen:

ybocs_df$therapieform
[1] "KVT" "PD"  "PD"  "KVT"