Import einer SPSS-Tabelle nach R

Import
R
Chunk
GTDS
SPSS
UTF8
CSV
Tabellenkalkulation
Tidyverse
readr::read_csv2
Author

Martin Burk

Published

August 30, 2022

Eine SPSS-Tabelle nach R importieren

Wir haben im vorherigen Schritt einen tabellarischen (2-dimensionalen) Auszug aus unserer Tumordatenbank (in diesem Fall GTDS) gezogen.
Die Daten liegen in einem SPSS-kompatiblen, aber SPSS-unabhängig lesbaren Format vor. Jeder Tumorfall bildet eine Zeile. Spalten entsprechen den verschiedenen Variablen/Parametern wie Tumorstadium, Jahr der Erstdiagnose usw. Die Spalten besitzen Namen (Spaltenüberschriften) im SPSS-Format.

Leider ist der Export aus der Datenbank abhängig von Systemeinstellungen des exportierenden Computer-Systems, vor allem dessen Code-Tabellen. Diese System-Einstellungen können in der Regel nicht vom Benutzer geändert werden.
Nach meiner Erfahrung gab es zum einen oft Kompatibilitätsprobleme mit dem Datumsformat in der Export-Datei, zum zweiten mit länderspezifischen Zeichen (z.B. Umlaute).
Ein direkter Import der Export-Tabelle resultierte so oft in einer fehlerhaften Datei. Diese ließ sich zwar innerhalb der Statistik-Software R ausbessern. Die Programmierung war aber mühevoll, weil immer wieder Besonderheiten zu berücksichtigen waren (die Programmierung war von der Herkunft der Import-Datei abhängig). Folgender Weg hat sich als zeitlich minimal aufwendiger, dafür aber zuverlässig herausgestellt:
Ich habe einen Zwischenschritt am auswertenden Rechnersystem eingefügt.

flowchart LR
  A[SPSS-ASC] --> B(Excel-CSV)
  B --> C(Import nach R-CSV/UTF8)

Die Textdatei-Importfunktion von Excel (oder einer anderen Tabellenkalkulationssoftware) erkennt die Spaltenformate in der Regel gut, und transkodiert nach UTF8. Danach folgt der Export dieser Tabelle aus Excel in eine CSV-Datei, die auf der UTF8-Kodierung beruht (ist beim Export explizit auszuwählen). Gerne kann man die nach Excel eingelesene Tabellen-Datei zusätzlich noch im Excel-Format (.xlsx) abspeichern. Diese Sicherungsdatei wird aber im folgenden nicht benötigt.

Die erzeugte Textdatei im CSV-Format und mit UTF8-Kodierung wird nun nach R in eine Tabellendatei (“Tibble” 1) mit dem Namen “GTDSroh” eingelesen.

library(tidyverse)
GTDSroh <- readr::read_csv2(path_of_RawData, col_names=TRUE )

Die Importfunktion read_csv2 aus dem tidyverse-Paket readr 2 ist für unseren Fall bestens geeignet. Sie findet Verwendung bei mit “;” separierten Daten und “,” als Dezimalzeichen -also für z.B. deutsche Zahlen.
Bei diesem komplexen Vorgang sind durchaus wesentliche Encoding-Probleme vorstellbar. Diese können mit einem zusätzlichen Code in eine gesonderte Fehler-Datei für den Import-Vorgang geschrieben werden.

library(tidyverse)
GTDSroh <- readr::read_csv2(path_of_RawData, col_names=TRUE )
GTDSroh_problems <- readr::problems()

Diese “problems”-Datei kann über den RStudio-IDE-Editor aufgerufen und angesehen werden. Bei vollständig fehlerfreiem Import ist diese Datei leer.
Encoding-Probleme (unterschiedliche Interpretation von z.B. Sonderzeichen) werden so allerdings nicht erkannt. Deshalb empfiehlt es sich immer, die importierte Daten-Datei (in diesem Beispiel die Datei GTDSroh) im Editor auch direkt anzusehen. Hier stellt sich dann schnell heraus, ob “ä” oder “ß” usw. korrekt interpretiert wurden.

Und so sieht der Output aus, der hier aber nur in Teilen dargestellt ist:

ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Warning: One or more parsing issues, call `problems()` on your data frame for details,
e.g.:
  dat <- vroom(...)
  problems(dat)

Die “parsing issues” lassen sich in diesem Fall übrigens mit dem genannten Aufruf von “problems()” nicht eingrenzen, die “problems”-Datei ist leer (und deshalb ist dieser Vorgang hier nicht gezeigt). Die “parsing issues” resultieren aus den Datumswerten, die sämtlich als Zeichenwerte (“character”) nach R übernommen wurden. Zu diesem Thema kommt später ein eigener Blog-Beitrag, der zeigt,wie weiter mit diesen importierten Datumswerten gearbeitet werden kann..

Es existieren in R zahlreiche weitere Importfunktionen für Dateien, die je nach Anwendungszweck auszuwählen wären (siehe z.B. Tidyverse Cookbook ). Wir würden uns an dieser Stelle aber mit dem oben zitierten R-Programmierbefehl begnügen - es klappt ja!

Die endgültige Tabelle in R (hier “GTDSroh”) ist nun nächster Ausgangspunkt für unsere Auswertungen.

— | This page brought to you by https://onkostats.de . . . . . — Made with R, RStudio, Quarto, Pandoc, Mermaid, Tidyverse and GTDS … Thank you! — The R logo is copyright © R foundation, licence CC-BY-SA 4.0

Footnotes

  1. “Tibble” ist in R eine Datentabelle aus der Klasse “tbl_df”, einer Subklasse von “data.frame”, und weist einige Eigenschaften auf, die vor allem bei Verwendung im “Tidyverse” wichtig sind (weiteres zu Tibble).↩︎

  2. readr bietet wesentlich komplexere Optionen, insbesondere die genaue Festlegung des Eingangsformates für jede Spalte der einzulesenden Datei. Details in der Tidyverse Dokumentation zu readr.↩︎