25  Schritt 1: Daten importieren

Das Importieren von Daten unterscheidet sich nicht von den Methoden aus Kapitel 14. Tidyverse bringt mit readr() ein eigenes Paket zum Importieren mit, dies ist aber nur für Textdateien wirklich geeignet. Mit den Zusatzpaketen haven und readxl können Sie wie in Kapitel 14 beschrieben über die Funktionen read_sav(), read_xlsx() und read_csv() Ihre Daten einlesen.

In RStudio können Sie einfach im Datenfenster auf Import Dataset klicken, siehe Abschnitt Abschnitt 14.6.

25.1 gelabelte SPSS-Daten

Hier sei noch einmal erwähnt, dass in SPSS kategoriale Daten häufig mit Labels versehen werden.

# Lade Test-SPSS-Datei mit Labels 
spss <- haven::read_sav(url("https://www.produnis.de/R/data/alteDaten-lang.sav"))
head(spss)
## # A tibble: 6 × 4
##   Frage_1             Frage_2        Frage_3             Frage_4            
##   <dbl+lbl>           <dbl+lbl>      <dbl+lbl>           <dbl+lbl>          
## 1 4 [stimme zu]       4 [stimme zu]  4 [stimme zu]       0 [nicht vorhanden]
## 2 4 [stimme zu]       4 [stimme zu]  4 [stimme zu]       0 [nicht vorhanden]
## 3 4 [stimme zu]       4 [stimme zu]  4 [stimme zu]       0 [nicht vorhanden]
## 4 4 [stimme zu]       3 [weiß nicht] 3 [weiß nicht]      4 [stimme zu]      
## 5 3 [weiß nicht]      3 [weiß nicht] 2 [stimme nicht zu] 2 [stimme nicht zu]
## 6 2 [stimme nicht zu] 3 [weiß nicht] 3 [weiß nicht]      2 [stimme nicht zu]

Mit head() sehen wir, dass die Werte der Spalten gelabelt sind (4=stimme nicht zu, 3=weiß nicht, usw.). Die Labels stehen in eckigen Klammern neben dem eingentlichen Wert der Variable.

Mit glimpse() werden die Labels ignoriert

# glimpse() zeigt KEINE Labels 
glimpse(spss)
## Rows: 1,000
## Columns: 4
## $ Frage_1 <dbl+lbl> 4, 4, 4, 4, 3, 2, 2, 2, 4, 3, 2, 5, 2, 2, 4, 5, 5, 0, 4, 1…
## $ Frage_2 <dbl+lbl> 4, 4, 4, 3, 3, 3, 1, 5, 4, 3, 2, 2, 2, 2, 4, 5, 1, 2, 4, 2…
## $ Frage_3 <dbl+lbl> 4, 4, 4, 3, 2, 3, 3, 3, 4, 3, 2, 2, 2, 3, 4, 2, 3, 3, 4, 4…
## $ Frage_4 <dbl+lbl> 0, 0, 0, 4, 2, 2, 2, 3, 5, 4, 2, 4, 4, 2, 0, 4, 4, 2, 5, 2…

In R ist die Verwendung von Wertelabels eher untypisch. Es empfiehlt sich, die Ausprägungsstufen so wie sie sind als Werte einzutragen, also z.B. direkt “männlich” - “weiblich” - “divers” anstatt 0 - 1 - 2 und anschließender Labelung. So werden die Ausprägungen auch auf den Grafiken entsprechend “aussagekräftig” angezeigt.

Wir wandeln alle Variablen in Faktoren um, welche die Labels als Levelnamen nutzen (die Funktion mutate() wird später genauer erläutert).

spss %>% 
  dplyr::mutate(as_factor(.))
## # A tibble: 1,000 × 4
##   Frage_1         Frage_2    Frage_3         Frage_4        
##   <fct>           <fct>      <fct>           <fct>          
## 1 stimme zu       stimme zu  stimme zu       nicht vorhanden
## 2 stimme zu       stimme zu  stimme zu       nicht vorhanden
## 3 stimme zu       stimme zu  stimme zu       nicht vorhanden
## 4 stimme zu       weiß nicht weiß nicht      stimme zu      
## 5 weiß nicht      weiß nicht stimme nicht zu stimme nicht zu
## 6 stimme nicht zu weiß nicht weiß nicht      stimme nicht zu
## # ℹ 994 more rows

Wenn die Daten umfangreich gelabelt sind, kann es hilfreich sein, sich ein “Wörterbuch” der Labels anzulegen. Hierfür nutzt man die Funktion generate_dictionary() aus dem labelled-Paket.

dict <- labelled::generate_dictionary(spss)

Das Objekt dict ist ein Datenframe, in welchem die Labels der Variablen gespeichert sind. In RStudio kann man die Labels so im Datenviewer durchsuchen.

Abb. 25.1: Labelwörterbuch

Da wir die SPSS-Datei mit den Funktionen des haven-Pakets importiert haben, liegen gelabelte Werte und Variablen als Klasse haven_labelled vor. Diese Eigenschaft machen wir uns in den nächsten Code-Schnipseln zu Nutze.

Mit diesen Befehlen werden alle Werte der im Datensatz enthaltenen Variablen, die als haven_labelled klassifiziert ist, in einen Factor umgewandelt:

spssfct <- spss %>%
  mutate_if(haven::is.labelled, haven::as_factor)
glimpse(spssfct)
## Rows: 1,000
## Columns: 4
## $ Frage_1 <fct> stimme zu, stimme zu, stimme zu, stimme zu, weiß nicht, stimme…
## $ Frage_2 <fct> stimme zu, stimme zu, stimme zu, weiß nicht, weiß nicht, weiß …
## $ Frage_3 <fct> stimme zu, stimme zu, stimme zu, weiß nicht, stimme nicht zu, …
## $ Frage_4 <fct> nicht vorhanden, nicht vorhanden, nicht vorhanden, stimme zu, …

Und folgende Befehle wandeln Variablenlabels in Variablennamen um, hierzu muss das Paket sjlabelled installiert sein:

spssn <- spssfct %>%
  sjlabelled::label_to_colnames()
glimpse(spssn)
## Rows: 1,000
## Columns: 4
## $ `Statistik ist mein Lieblingsfach?`                    <fct> stimme zu, stim…
## $ `Das Statistikprogramm R gefällt mir besser als SPSS?` <fct> stimme zu, stim…
## $ `Ich hätte gerne mehr Übungen in Statistik?`           <fct> stimme zu, stim…
## $ `Schalke ist mein Lieblingsverein?`                    <fct> nicht vorhanden…