Wie kann ich Daten vernünftig in R einlesen? Wie lade ich eine SPSS-typische .sav-Datei? Warum sieht mein Dataframe so komisch aus nach dem Einlesen einer csv-Datei? Wie speichere ich meine Daten am besten ab?
Um Fragen wie diese wird es heute gehen. Nachdem wir in den letzten Posts etwas über den Aufbau von data frames erfahren haben, schauen wir uns heute an, wie man Daten aus verschiedenen Dateien einliest und in einen gut formatierten Datensatz bekommt, sowie wie man in Dateien schreibt.
Daten einlesen
Eine Grundfunktion zum Einlesen von Daten in R ist read.table(…). Wir können die Hilfe mit ?read.table
aufrufen und sehen, dass diese Funktion viele sogenannte Funktionsparameter hat (file, header, sep, quote, usw.). Von diesen Parametern muss file angegeben werden, die nachfolgenden haben allerdings Standardwerte (z.B. header = FALSE). Wir können diese Paramter aber so anpassen, dass sie auf die zu lesende Datei zugeschnitten sind. Ist unsere Datei im internationalen Standard-CSV-Format, so ist ein Komma das Trennzeichen, der Punkt das Dezimalzeichen, und die erste Zeile besteht aus den Spaltennamen. In diesem Fall würden wir eine Datei so einlesen: read.table("example.csv", header=TRUE, sep=",", dec=".")
. Wie man sieht wird als erstes Argument der Dateiname übergeben, in unserem Fall example.csv. Die Anführungszeichen dürfen wir nicht vergessen, da example.csv eine Zeichenkette ist und kein Objektname. Ebenso ist es wichtig, die Dateiendung der Datei mitanzugeben, auch wenn diese z.B. in Windows manchmal ausgeblendet wird. Da in der ersten Zeile die Spaltennamen enthalten sind, setzen wir header=TRUE. Das Trennzeichen wird durch sep (von „separator“) angegeben und ist in unserem Beispiel ein Komma; das Dezimalzeichen dec ist ein Punkt.
Spezifische Funktionen
Da es aber etwas umständlich wird, jedes Mal für ein Standardformat die Funktionsparameter anzupassen, gibt es vorgefertigte Funktionen. So hätten wir eben auch einfach read.csv("example.csv")
benutzen können und hätten das selbe Ergebnis. Im Folgenden weitere Funktionen für verschiedene Formate:
– read.table: Grundfunktion, bei der man viele Anpassungen machen kann
– read.csv: für das typische csv-Format mit Komma als Trennzeichen
– read.csv2: für das deutsche Format mit Semikolon als Trennzeichen und Komma als Dezimalzeichen
– read.delim: für ein Format, in dem ein Tab das Trennzeichen ist
Tip fürs Troubleshooting: Man muss sehr gut aufpassen, wie andere Programme csv-Dateien exportieren. Falls man z.B. einen Datensatz aus SPSS oder Excel als csv-Datei abspeichert, so kommt es bei deutschen Einstellungen dazu, dass das Semikolon-Format und nicht das Komma-Format gewählt wird. In R muss man hier also die read.csv2-Funktion benutzen.
Darüber hinaus können wir auch SPSS-Daten einlesen; dazu brauchen wir allerdings eine weiteres Package, das wir zuerst installieren müssen, sofern es noch nicht installiert wurde: install.packages("foreign")
. Anschließend können wir das Package laden (library(foreign)
) und die Funktion read.spss benutzen: read.spss("example.sav", use.value.lables=FALSE, to.data.frame=TRUE)
. Ich empfehle die beiden zusätzlichen Argumente, da wir so den SPSS-Datensatz übersichtlich in einem data frame haben.
Daten schreiben
Beim Schreiben von Daten in eine Datei sieht es ähnlich aus wie beim Lesen. Angenommen wir haben ein data frame mit dem Namen dfResults und möchten ihn als csv-Datei abspeichern, so können wir ganz einfach folgendes schreiben: write.csv(dfResults, file="results.csv", row.names=FALSE)
. Als Funktionsparameter sehen wir hier das R-Objekt an erster Stelle (unser Datensatz dfResults), der Dateiname, und row.names, welches FALSE ist, da sonst noch zusätzlich eine Spalte mit Zeilennamen angelegt wird (was häufig nichts anderes als die Nummern 1 bis N sind).
Auch hier beim Schreiben gilt, dass man verschiedene Funktionen verwenden kann, je nach gewünschtem Format. Allerdings können keine SPSS-Dateien geschrieben werden.
– write.table
– write.csv
– write.csv2
– write.delim
Weitere Datentypen
Natürlich kann man mit R noch viele weitere Dateitypen einlesen. Ohne weitere Packages benutzen zu müssen gibt es zum Beispiel noch read.fwf für fixed width format – Dateien, read.dcf für Debian Control Files, usw. Komplexere Dateitypen wie json oder XML lassen sich ohne Probleme mit den Funktionen aus entsprechenden Packages einlesen.
– xmlParse: für das parsen von XML-Dateien, benötigt das Package XML
– fromJSON: für das parsen von json-Dateien, benötigt das Package jsonlite
– read.dbf: für das Einlesen von dbf-Dateien, benötigt das oben erwähnte Package foreign
– loadWorkbook und readWorksheet: für Excel-Dateien, benötigt das Package XLConnect
Soweit für heute, viel Erfolg!
[…] Kurz vorab: Es gibt natürlich die Möglichkeit einen „Umweg“ zu gehen und die Daten aus Excel heraus als CSV zu exportieren. Dies kann nützlich sein, wenn wir kein zusätzliches Package installieren und die Daten ganz einfach aus einer CSV-Datei einlesen möchten. Dies können wir mit read.csv (base R) bzw. fread (data.table) tun (siehe auch diesen früheren Post). […]