3  Daten ein- und ausgeben

Wir laden zunächst das tidyverse-Paket.

library(tidyverse)

3.1 Tabellarische Daten einlesen

R bietet Funktionen zum Laden und Exportieren von nahezu jedem Dateiformat, aber für statistische Auswertungen haben sich tabellarische Daten seit Jahrzehnten etabliert. Bei tabellarischen Daten sind die Daten in Zeilen und Spalten organisiert. Die Spalten können verschiedene Datentypen enthalten. Entsprechend wird dieses Datenformat als Tibble in R importiert. Typische Dateiformate tabellarischer Daten sind komma- und tabulatorseparierte Daten csv bzw. tsv, aber auch Excel-Dateien oder SPSS-Datensätze folgen dieser Organisationsform. Für einige Datenformate benötigen wir Zusatzpakete, die das Lesen (und oft auch Schreiben) von spezifischen Dateien erlauben.

Um die verschiedenen Dateiformate einzulesen, bietet das tidyverse eine einheitliche Familie von Funktionen. Diese Funktionen folgen derselben Syntax, aus dem Präfix read_ gefolgt vom Dateiformat, wie etwa csv oder tsv. Meist benötigen die read_-Funktionen lediglich den Datenpfad in Anführungszeichen als Funktionsargument. Um auf Unterordner zuzugreifen, wird der Ordnername gefolgt von einem / dem Dateinamen vorangestellt. Der Output der Funktion muss anschließend in einem Objekt gespeichert werden. Eine Konvention ist es, den Datensatz unter einem kurzen Objektnamen d oder df zu speichern, um weniger tippen zu müssen.

df <- read_csv("ORDNERPFAD/dateiname.csv")

Der Ordnerpfad ist dabei individuell unterschiedlich und hängt davon ab, wo die Daten liegen und wo unser Arbeitsordner ist.

Dateipfade oder “Ich kann die Daten nicht öffnen”

Grundsätzlich funktioniert in RStudio die Autovervollständigung, d.h. wenn wir innerhalb der Anführungszeichen von read_csv("") die Tabulatortaste drücken, können wir uns von Ordner zu Ordner hangeln, bis wir die Datei gefunden haben.

Einfacher ist es aber, wenn wir den Datensatz direkt in dem Ordner abgelegt haben, in dem unser RStudio-Projekt liegt (siehe RStudio Projekte). Dann beziehen sich alle Pfade auf diesen Ordner.

Tipp: Wenn eine Datei nicht gefunden wird, erst einmal prüfen, ob wir in der korrekten Projektumgebung BA-Datenanalyse sind (in der Menüleiste oben rechts).

Zur besseren Übersicht kann es sich anbieten, die Daten in einem eigenen Unterordner des Projektordners zu speichern wie in unseren Seminarmaterialien. Hier liegen die Daten im Unterordner data, d.h. wir müssen beim Einlesen diesen Pfad verwenden.

Wollen wir im Rahmen eines Skriptes mehrere Datensätze laden, ist es sinnvoll, diesen einen sprechenden Namen zu geben. Erstens überschreibt R Objekte mit demselben Namen, wenn dieser neu vergeben wird. Lesen wir also zuerst den Victim Blaming-Datensatz als df ein und danach den Telegram-Datensatz (siehe hierzu Datensätze) ebenfalls als df, so steht der Victim Blaming-Datensatz im Folgenden nicht mehr zur Verfügung. Zweitens helfen sprechende Namen, die Datensätze bei der Analyse einfacher zu unterscheiden. Dabei ist zu beachten, dass keine Sonderzeichen (#, $, etc.), Leerzeichen, oder Umlaute verwendet werden, da dies zu Problemen bei der weiteren Arbeit mit dem Datensatz führt. Hier nennen wir den Telegram-Datensatz, der als TSV-Datei vorliegt, nach dem Einlesen tg.

tg <- read_tsv("data/telegram.tsv")

Praktischerweise können alle read_ Funktionen auch Daten direkt aus dem Internet laden. Hier laden wir eine CSV-Datei:

bb_deaths <- read_csv("https://wegweisr.haim.it/Daten/breaking_bad_deaths.csv")
bb_deaths
# A tibble: 271 × 4
  name           episode murderer       method          
  <chr>            <dbl> <chr>          <chr>           
1 Emilio Koyama      101 Walter White   poisoned        
2 Krazy 8            101 Walter White   strangled       
3 Gonzo              201 .              accidental death
4 No-Doze            201 Tuco Salamanca beaten          
5 Tuco Salamanca     202 Hank Schrader  shot            
# ℹ 266 more rows
csv und csv2

Es gibt zwei unterschiedliche Arten von CSV-Dateien: In der US-amerikanischen Variante werden die Spalten mit Komma getrennt, der Punkt dient als Dezimalzeichen. In der europäischen Variante sind aber die Kommas Dezimalzeichen, weshalb die Spalten mit Semikolon separiert werden. Oft müssen wir raten und/oder ausprobieren, welches Format eine CSV-Datei hat. Für die amerikanische Variante verwenden wir read_csv(), für die europäische read_csv2(). Dasselbe gilt auch für das Speichern. Wenn wir eine CSV zum späteren Öffnen mit unserem (deutschen) Excel speichern wollen, sollten wir daher write_csv2() verwenden.

3.2 SPSS- und Excel-Dateien einlesen

Für Datensätze kommerzieller Statistiksoftware (SPSS, SAS, Stata) benötigen wir das Paket haven. Da das Paket ebenfalls zum tidyverse gehört, folgen die Funktionen der Syntax der read_-Familie. Das haven Paket wird nicht mit library(tidyverse) geladen, weil es relativ selten außerhalb der Wissenschaft verwendet wird, daher rufen wir die Funktion explizit auf (siehe hierzu R-Pakete).

df <- haven::read_sav("data/dateiname.sav")

Um Excel-Dateien zu öffnen, verwenden wir die Funktion read_excel() aus dem readxl-Paket, das ebenfalls zum tidyverse gehört und daher installiert, aber wie haven nicht standardmäßig geladen wird.

df <- readxl::read_excel("data/dateiname.xlsx", sheet = 1)

Mit dem zusätzlichen sheet-Argument können wir festlegen, welches Arbeitsblatt geladen werden soll. Die Excel-Datei sollte keine Formatierungen bzw. zusammengefasste Zellen etc. haben, da diese nicht gelesen werden können. Ebenso sollten in der ersten Zeile die Variablennamen stehen.

3.3 Datensätze in R beschreiben

Im Folgenden wollen wir uns einen unserer Datensätze für das Seminar, den Victim Blaming-Datensatz, etwas näher anschauen. Dieser liegt als Excel-Datei vor und muss entsprechend zunächst eingelesen werden.

vb <- readxl::read_excel("data/victim_blaming.xlsx")

Nun gibt es verschiedene Möglichkeiten, eine erste Übersicht über die Datenstruktur zu erhalten. Die Funktion dim() gibt eine Übersicht über die Anzahl der Zeilen (1. Wert) und Spalten (2. Wert). Die Namen der Variablen bzw. Spalten können über die Funktion names() aufgerufen werden.

dim(vb)
[1] 586  61
names(vb)
 [1] "stimulus_rec"   "extraversion"   "info"           "v_1"           
 [5] "v_2"            "v_3"            "v_4"            "v_5a"          
 [9] "v_5b"           "v_5c"           "v_5d"           "v_5e"          
[13] "v_5f"           "v_5g"           "v_5h"           "v_5i"          
[17] "v_5j"           "v_5k"           "v_6"            "v_7"           
[21] "v_8"            "v_9a"           "v_9b"           "v_9c"          
[25] "v_9d"           "v_9e"           "v_9f"           "v_9g"          
[29] "v_9g_S"         "v_10"           "v_11"           "v_12"          
[33] "v_13"           "v_14a"          "v_14b"          "v_14c"         
[37] "v_14d"          "v_14e"          "v_15a"          "v_15b"         
[41] "v_15c"          "v_15d"          "v_15e"          "v_15f"         
[45] "v_15g"          "v_15h"          "v_15i"          "v_15j"         
[49] "v_15k"          "v_16a"          "v_16b"          "v_16c"         
[53] "v_17"           "v_18"           "v_19a"          "v_19b"         
[57] "v_19c"          "v_19d"          "v_14crec"       "vb_index"      
[61] "stimulus_group"

Wir sehen, dass unser Datensatz 586 Zeilen (in diesem Fall also Teilnehmende am Experiment) und 61 Spalten (also Variablen) hat.

Die Variablennamen sind nicht immer gut nachzuvollziehen, z.B. wenn sie aus einer Befragungssoftware (z.B. SosciSurvey) exportiert werden. In diesem Fall sind zwei Optionen für das weitere Arbeiten in R sinnvoll: (1) Wir erstellen z.B. in Excel eine Liste mit den Variablennamen und daneben einer Beschreibung ihres Inhaltes. Somit können wir immer schauen, welche Bedeutung/welchen Inhalt z.B. die v_4 hat. Solch eine Übersicht haben wir für die Datensätze angelegt. (2) Wir benennen die Variablen so um, dass ihre Namen sprechend und systematisch sind (siehe hierzu Variablen umbenennen).

Ein zweiter Schritt ist zumeist, sich die ersten Datenpunkte anzuschauen. Dafür gibt es die Funktion head().

head(vb)
# A tibble: 6 × 61
  stimulus_rec      extraversion info    v_1 v_2   v_3   v_4    v_5a  v_5b  v_5c
  <chr>             <chr>        <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Extravertiert mi… Extravertie… mit …    22 weib… Abit… <NA>      2     3     4
2 Extravertiert oh… Extravertie… ohne…    21 männ… Abit… <NA>      4     4     1
3 Introvertiert mi… Introvertie… mit …    21 weib… Abit… <NA>      3     3     4
4 Extravertiert mi… Extravertie… mit …    16 männ… Abit… <NA>      2     2     5
5 Introvertiert oh… Introvertie… ohne…    22 männ… Abit… <NA>      3     4     2
# ℹ 1 more row
# ℹ 51 more variables: v_5d <dbl>, v_5e <dbl>, v_5f <dbl>, v_5g <dbl>,
#   v_5h <dbl>, v_5i <dbl>, v_5j <dbl>, v_5k <dbl>, v_6 <dbl>, v_7 <dbl>,
#   v_8 <dbl>, v_9a <dbl>, v_9b <dbl>, v_9c <dbl>, v_9d <dbl>, v_9e <dbl>,
#   v_9f <dbl>, v_9g <dbl>, v_9g_S <chr>, v_10 <dbl>, v_11 <dbl>, v_12 <dbl>,
#   v_13 <dbl>, v_14a <dbl>, v_14b <dbl>, v_14c <dbl>, v_14d <dbl>,
#   v_14e <dbl>, v_15a <dbl>, v_15b <dbl>, v_15c <dbl>, v_15d <dbl>, …

Die letzten Datenpunkte können mit tail() angezeigt werden.

tail(vb)
# A tibble: 6 × 61
  stimulus_rec      extraversion info    v_1 v_2   v_3   v_4    v_5a  v_5b  v_5c
  <chr>             <chr>        <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 Introvertiert mi… Introvertie… mit …    21 weib… Abit… <NA>      3     4     4
2 Extravertiert mi… Extravertie… mit …    21 männ… Abit… <NA>      2     4     4
3 Extravertiert oh… Extravertie… ohne…    19 weib… Ich … Abit…     2     4     2
4 Extravertiert oh… Extravertie… ohne…    20 weib… Abit… <NA>      3     4     2
5 Extravertiert oh… Extravertie… ohne…    17 männ… Ich … Abit…     1     2     5
# ℹ 1 more row
# ℹ 51 more variables: v_5d <dbl>, v_5e <dbl>, v_5f <dbl>, v_5g <dbl>,
#   v_5h <dbl>, v_5i <dbl>, v_5j <dbl>, v_5k <dbl>, v_6 <dbl>, v_7 <dbl>,
#   v_8 <dbl>, v_9a <dbl>, v_9b <dbl>, v_9c <dbl>, v_9d <dbl>, v_9e <dbl>,
#   v_9f <dbl>, v_9g <dbl>, v_9g_S <chr>, v_10 <dbl>, v_11 <dbl>, v_12 <dbl>,
#   v_13 <dbl>, v_14a <dbl>, v_14b <dbl>, v_14c <dbl>, v_14d <dbl>,
#   v_14e <dbl>, v_15a <dbl>, v_15b <dbl>, v_15c <dbl>, v_15d <dbl>, …

Die Tabellen, die wir als Output bekommen, zeigen nicht alle Variablen/Spalten an, sie dienen nur dem ersten groben Überblick. Dennoch enthalten sie einige für uns interessante Informationen.

Zum einen die Spaltenüberschrift, die uns Auskunft darüber gibt, welche Variablen im Datensatz vorkommen, also noch einmal die Namen der Spalten. In der Zeile darunter steht mit < > umschlossen der Datentyp.

Es kann vorkommen, dass beim Import eine Variable, die eigentlich numerisch sein sollte, als Text importiert wird. Das ist dann häufig der Grund für spätere Fehlermeldungen bei der Auswertung. Um dies zu überprüfen, können wir auch für einzelne Variablen den Datentyp anzeigen lassen.

class(vb$v_1)
[1] "numeric"

Sollte der Datentyp nicht stimmen, empfiehlt es sich, im Originaldatensatz zu prüfen, ob an einer Stelle statt einer Zahl Text steht und dieses Problem ggf. zu beheben. Alternativ kann der Datentyp auch mit den as.-Funktionen angepasst werden. So lässt sich sich mit as.numeric() aus einer Spalte, deren Zahlenwerte fälschlicherweise als Text importiert wurden, eine Zahl machen. Die umgekehrte Operation führt die Funktion as.character() durch.

Das tidyverse bietet darüber hinaus noch die Funktion glimpse(), welche die Funktionalitäten von names(), head() und dim() vereint. Zudem beinhaltet der Output der Funktion Informationen über den Datentyp, der in der jeweilige Spalte gespeichert ist.

glimpse(vb)
Rows: 586
Columns: 61
$ stimulus_rec   <chr> "Extravertiert mit Info", "Extravertiert ohne Info", "I…
$ extraversion   <chr> "Extravertiert", "Extravertiert", "Introvertiert", "Ext…
$ info           <chr> "mit Info", "ohne Info", "mit Info", "mit Info", "ohne …
$ v_1            <dbl> 22, 21, 21, 16, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21,…
$ v_2            <chr> "weiblich", "männlich", "weiblich", "männlich", "männli…
$ v_3            <chr> "Abitur", "Abitur", "Abitur", "Abitur", "Abitur", "Abit…
$ v_4            <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ v_5a           <dbl> 2, 4, 3, 2, 3, 1, 3, 4, 3, 2, 5, 1, 3, 1, 3, 2, 2, 3, 3…
$ v_5b           <dbl> 3, 4, 3, 2, 4, 4, 5, 5, 3, 3, 1, 2, 5, 1, 3, 4, 2, 4, 3…
$ v_5c           <dbl> 4, 1, 4, 5, 2, 4, 1, 2, 3, 3, 3, 5, 2, 5, 4, 4, 4, 1, 3…
$ v_5d           <dbl> 2, 1, 3, 1, 3, 2, 3, 3, 4, 1, 2, 5, 4, 1, 1, 2, 1, 2, 2…
$ v_5e           <dbl> 3, 2, 1, 5, 3, 5, 3, 3, 1, 4, 3, 3, 2, 4, 3, 4, 5, 3, 4…
$ v_5f           <dbl> 4, 4, 4, 5, 2, 5, 3, 2, 3, 4, 4, 1, 1, 4, 5, 4, 4, 3, 4…
$ v_5g           <dbl> 3, 3, 2, 5, 3, 5, 3, 4, 1, 5, 3, 1, 3, 4, 4, 3, 5, 2, 3…
$ v_5h           <dbl> 3, 2, 2, 1, 3, 2, 3, 3, 3, 3, 2, 4, 3, 3, 1, 2, 2, 2, 2…
$ v_5i           <dbl> 4, 4, 3, 5, 2, 4, 3, 2, 3, 4, 4, 1, 1, 4, 4, 4, 4, 3, 3…
$ v_5j           <dbl> 4, 2, 3, 3, 3, 2, 3, 2, 3, 3, 2, 4, 2, 1, 2, 2, 3, 1, 2…
$ v_5k           <dbl> 3, 2, 3, 4, 5, 3, 3, 3, 4, 1, 2, 4, 4, 2, 2, 2, 3, 1, 2…
$ v_6            <dbl> 5, 4, 5, 1, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 5, 5…
$ v_7            <dbl> 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 5, 5, 5, 5, 4, 4, 5, 3, 5…
$ v_8            <dbl> 1, 1, 1, 1, 4, 4, 5, 5, 3, 4, 4, 4, 5, 4, 3, 4, 4, 5, 4…
$ v_9a           <dbl> NA, NA, NA, NA, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ v_9b           <dbl> NA, NA, NA, NA, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, …
$ v_9c           <dbl> NA, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, …
$ v_9d           <dbl> NA, NA, NA, NA, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ v_9e           <dbl> NA, NA, NA, NA, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, …
$ v_9f           <dbl> NA, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ v_9g           <dbl> NA, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, …
$ v_9g_S         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "so…
$ v_10           <dbl> 5, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5…
$ v_11           <dbl> 5, 3, 3, 2, 4, 4, 5, 4, 3, 4, 4, 4, 5, 5, 4, 4, 2, 4, 5…
$ v_12           <dbl> 4, 3, 5, 5, 4, 4, 5, 3, 5, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4…
$ v_13           <dbl> 2, 2, 4, 2, 3, 2, 5, 5, 4, 4, 4, 4, 5, 5, 4, 4, 3, 4, 5…
$ v_14a          <dbl> 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1…
$ v_14b          <dbl> 2, 2, 1, 4, 2, 2, 1, 3, 4, 3, 1, 2, 2, 2, 4, 2, 1, 3, 1…
$ v_14c          <dbl> 4, 4, 5, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 5, 4, 4, 4, 5, 5…
$ v_14d          <dbl> 1, 1, 1, 3, 2, 2, 1, 3, 1, 2, 1, 1, 1, 2, 3, 2, 1, 2, 1…
$ v_14e          <dbl> 2, 2, 1, 2, 3, 4, 1, 3, 1, 3, 4, 2, 1, 3, 3, 1, 2, 1, 1…
$ v_15a          <dbl> 3, 1, 3, 2, 4, 4, 5, 3, 3, 2, 3, 3, 2, 4, 1, 4, 1, 5, 3…
$ v_15b          <dbl> 5, 1, 4, 3, 5, 5, 5, 5, 3, 3, 3, 5, 3, 5, 4, 5, 2, 5, 4…
$ v_15c          <dbl> 4, 1, 1, 5, 5, 2, 5, 4, 3, 5, 3, 4, 5, 3, 4, 4, 1, 5, 4…
$ v_15d          <dbl> 3, 1, 1, 2, 2, 2, 3, 4, 2, 3, 3, 3, 5, 4, 2, 4, 1, 4, 2…
$ v_15e          <dbl> 3, 1, 4, 5, 5, 5, 5, 3, 4, 5, 4, 5, 5, 4, 5, 5, 4, 5, 5…
$ v_15f          <dbl> 3, 1, 1, 2, 3, 3, 5, 4, 3, 3, 3, 4, 4, 3, 2, 4, 1, 4, 3…
$ v_15g          <dbl> 3, 2, 1, 4, 2, 3, 3, 3, 4, 4, 3, 3, 4, 3, 3, 3, 2, 1, 2…
$ v_15h          <dbl> 3, 2, 1, 5, 5, 3, 1, 4, 4, 4, 4, 5, 1, 3, 4, 5, 5, 4, 3…
$ v_15i          <dbl> 4, 1, 1, 1, 2, 1, 3, 3, 3, 4, 3, 2, 2, 2, 3, 2, 2, 1, 2…
$ v_15j          <dbl> 5, 2, 4, 4, 4, 4, 1, 3, 3, 2, 3, 5, 2, 3, 3, 4, 3, 5, 4…
$ v_15k          <dbl> 3, 5, 3, 1, 2, 2, 1, 3, 2, 1, 3, 2, 3, 2, 2, 1, 4, 1, 3…
$ v_16a          <dbl> 2, 4, 4, 5, 2, 5, 5, 2, 3, 3, 5, 4, 2, 3, 4, 5, 5, 5, 5…
$ v_16b          <dbl> 2, 3, 4, 5, 4, 2, 5, 3, 3, 3, 5, 4, 2, 4, 4, 3, 5, 5, 5…
$ v_16c          <dbl> 2, 3, 4, 5, 4, 4, 5, 2, 4, 3, 5, 4, 4, 4, 4, 3, 5, 5, 1…
$ v_17           <chr> "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "…
$ v_18           <chr> "Nur ich selbst", "Jeder, diese sind öffentlich", "Ich …
$ v_19a          <chr> "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie",…
$ v_19b          <chr> "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie",…
$ v_19c          <chr> "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie",…
$ v_19d          <chr> "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie", "Nie",…
$ v_14crec       <dbl> 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 1…
$ vb_index       <dbl> 1.6, 1.6, 1.0, 2.2, 1.8, 2.2, 1.0, 3.0, 1.6, 2.2, 1.6, …
$ stimulus_group <dbl> 1, 2, 4, 1, 3, 1, 3, 4, 4, 1, 2, 4, 3, 1, 1, 1, 1, 2, 2…

3.4 Variablen umbenennen

Wie oben erklärt, kann es für das Arbeiten in R hilfreich sein, wenn die Variablennamen so gewählt sind, dass wir den Inhalt der Variable daraus ableiten können. Hier gibt es kein allgemeingültiges Vorgehen, abgesehen von den gängigen Konventionen zur Benennung von Variablen (siehe Variablen, Datentypen und Kommentare). Sinnvoll kann es etwa sein, alle Variablen, die thematisch zusammengehören, z.B. weil sie alle Items einer Skala sind oder weil sie alle zur Soziodemographie gehören, mit einem einheitlichen Präfix, gefolgt von einem _ und dann einer eindeutigen Kennung zu benennen.

Dies machen wir beispielhaft für die soziodemographischen Variablen im Victim Blaming-Datensatz sowie für die zur Victim Blaming-Skala gehörenden Items. Dafür nutzen wir die rename()-Funktion.

vb <- vb |>
  rename(
    soz_age = v_1,
    soz_gender = v_2,
    soz_edu = v_3,
    vb_01 = v_14a,
    vb_02 = v_14b,
    vb_03 = v_14c,
    vb_04 = v_14d
  ) # Nie vergessen: Klammern immer alle wieder schließen!

Erläuterungen:

  • Hinter dem <- geben wir an, aus welchem Datensatz die nachfolgenden Variablen stammen. Vor dem <- steht, in welchen Datensatz die umbenannten Variablen gespeichert werden sollen. In diesem Fall wollen wir sie im selben Datensatz umbenennen.

  • Bei der Rename-Funktion steht hinter dem = immer der alte Variablenname, davor der neue.

  • Mehrere nacheinanderfolgende Umbenennungen können durch , abgetrennt in denselben Befehl gepackt werden.

3.5 Daten speichern

Analog zu den read_-Funktionen gibt es noch die write_-Funktionen, welche die Datensätze exportieren. Hier ist das erste Funktionsargument der Objektname des Datensatzes und das zweite Argument der Dateipfad bzw. der Unterordner des RStudio-Projektes.

write_csv2(vb, "data/dateiname.csv") # Export: Objektname, Zielordner & Dateiname

3.6 Glossar

Funktion Definition
class() Anzeige des Datentypes eines Objektes
dim() Übersicht über die Anzahl der Zeilen (1. Wert) und Spalten (2. Wert) eines Dataframes/Tibbles
glimpse() Datensatz-Übersicht, Kombination von names(), head(), dim() und class()
haven::read_sav() Einlesen vonSPSS-Dateien
head() Anzeige der ersten Zeilen eines Dataframes/Tibbles
names() Übersicht über die Variablennamen in einem Dataframe/Tibble
read_csv() Einlesen von CSV-Dateien (Spalten mit Komma getrennt)
read_csv2() Einlesen von CSV-Dateien (Spalten mit Semikolon getrennt)
readxl::read_excel() Einlesen von Excel-Dateien
rename() Umbenennung von Variablen im Dataframe/Tibble
tail() Anzeige der letzten Zeilen eines Dataframes/Tibbles
write_csv() Auslesen/Speichern von CSV-Dateien (Spalten mit Komma getrennt)
write_csv2() Auslesen/Speichern von CSV-Dateien (Spalten mit Semikolon getrennt)

3.7 Hausaufgabe

Im Rahmen von Projekten kann es sein, dass Sie Daten zunächst per Hand in eine Tabelle eintragen müssen, bevor Sie diese in R einlesen und weiterverarbeiten können. Im Beispiel für die Hausaufgabe handelt es sich um eine Befragungsstudie, die per Paper & Pencil ausgefüllt wurde. Ihre Aufgabe ist es nun, den Fragebogen in Excel zu übertragen. Gehen Sie hierfür folgendermaßen vor:

  1. Öffnen Sie eine leere Excel-Datei und den pdf-Fragebogen Fragebogen_Mobile1.pdf.
  2. Legen Sie alle Variablen an, die mit dem Fragebogen erfasst werden. Versuchen Sie dabei, sinnvolle Variablennamen zu vergeben.
  3. Geben Sie die Antworten, die auf dem Fragebogen eingetragen wurden, als ersten Datenpunkt (Fall) in der Excel-Datei an.
  4. Speichern Sie die Excel-Datei im Ordner data.
  5. Lesen Sie den Datensatz in R ein.
  6. Verschaffen Sie sich einen Überblick über die Variablen und Datentypen.

Tipp: Wenn Sie unsicher sind, wie ein Datensatz in Excel aussieht, kann ein Blick in den Victim-Blaming-Datensatz, den Sie im Ordner data finden, helfen!