Daten lesen und schreiben

Buch zum Lesen

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!

Add a comment

*Please complete all fields correctly

Ähnliche Posts

Das List-Objekt in R
Plots in R