Hej Leute,

jeder, der mit R zu tun hat, kennt es. Wir wollen unsere Daten natürlich nicht nur in R behalten, sondern in die große weite „Software“-Welt heraustragen. Doch wie geht das? Wenn wir noch nicht irgendwelche funky APIs oder Datenbanken benutzen, ist der Standard aktuell noch die gute alte csv-Datei. Doch R hat noch mehr Formate zu bieten –durch entsprechende Packages bekommt man eine ganze Menge Dateiformate auf dem Silberteller präsentiert. So sind vor allem Excel (siehe mein separaten Artikel zum Einlesen und Schreiben von xlsx-Dateien), aber auch SPSS und SAS häufig gebrauchte Programme, so dass wir unsere schön berechneteten Dataframes dort zur Verfügung haben wollen.

In Teil 2: Daten nach R importieren erkläre ich Euch die wichtigsten Befehle zum Einlesen der verschiedenen Formate.

Wie oben schon erwähnt, gibt es neben dem Dateiaustausch auch andere Möglichkeit, Daten zu speichern, nämlich in Datenbanken. Ich verlinke hier, wenn der Artikel fertig ist.

R-interne Formate

Ok, klar benötigen wir erstmal Export-Funktionen für die nativen R-Formate. Diese sind natürlich dann sinnvoll, wenn wir die Daten wieder in R einlesen wollen. Das geht am schnellsten und die Datentypen (character, numeric, …) bleiben auch erhalten.

Es gibt zwei native Datenformate in R, nämlich RData und RDS. In eine RData-Datei können eine oder mehrere Dataframes geschrieben werden. Mit load(„dateiname“) wird die Datei wieder geladen. Zu beachten ist, dass die Benennung der Dataframes gleich bleibt. Benutzt also möglichst sprechende Namen, damit ihr beim Laden nicht ausversehen vorhandenes überschreibt. Zweite Möglichkeit ist das RDS-Format, welches einen Dataframe speichern kann. Der entsprechende Lese-Befehl ist df <- readRDS(„dateiname.Rds“). Hierbei kann ich also – im Gegensatz zur RData-Datei – den Variablennamen zuweisen.

RData

einen Dataframe in eine Datei schreiben:

save(df, file="dateiname.RData")

mehrere Dataframes in eine Datei schreiben:

save(df1, df2, file="dateiname.RData")

RDS

saveRDS(df, "dateiname.rds")

 

Standard-Formate

csv-Datei

csv steht für comma separated values (Komma-getrennte Werte) und ist das einfachste Format für Tabellen. Um etwas Verwirrung zu stiften, das Komma im Namen muss kein Komma sein, d.h. wir können auch andere Trennzeichen, z.B. Semikolon, Pipe | oder etwas anderes definieren. Vorteil ist wie gesagt die Einfachheit des Formats, so dass wirklich alle Daten-Programme (auch Excel) etwas damit anfangen können. Nachteile sind fehlende Komprimierung und Formatierungsmöglichkeiten. Die fehlende Komprimierung macht die Datei verhältnismäßig groß, die fehlenden Formatierungsmöglichkeiten sorgen dafür, dass die Datei nicht schön ausschaut.

Fazit: Benutze csv-Dateien, um Daten zwischen verschiedenen Programmen auszutauschen

write.csv(df, "dateiname.csv", row.names=FALSE, na="")write.csv2(df, "dateiname.csv", row.names=FALSE, na="")

 

txt-Datei

Bei Text-Dateien, die Daten enthalten, spricht man von sogenannte tab-delimited files, d.h. die einzelnen Werte werden durch TABs getrennt. Für dieses Dateiformat gilt eigentlich das gleiche wie für das csv-Format: es ist ein universelles Format zum Austausch von Daten zwischen Programmen und jede normale Daten-Software unterstützt diese Dateien.

write.table(df, "dateiname.txt", sep="\t", row.names=FALSE, na="")

 

JSON

JSON ist die Abkürzung für JavaScript Object Notation und wurde zum Zweck des schlanken Datenaustauschs, meist zwischen Sever und Client, entwickelt. Es ist gut vom Menschen lesbar. Wer mehr wissen will, liest sich doch einfach mal den JSON-Artikel bei Wikipedia vorbei, in dem übrigens auch die Abgrenzung zu XML behandelt wird.

library(RJSONIO)
write(jsonObject, file="dateiname.json")

 

XML

XML ist die Abkürzung für eXtensible Markup Language und ähnlich wie JSON ein Datenaustauschformat, jedoch mit mehr Möglichkeiten. XML dient der Darstellung hierarchischer Daten in einer Textdatei. Für die interessierten empfehle ich ebenfalls den XML-Artikel bei Wikipedia.

library(XML)
saveXML(XMLObject, file=”dateiname.xml”)

 

Excel: xlsx und xls-Datei

Excel-Dateien haben die Endung xlsx oder xls, wobei xls das ältere Format ist (bis Excel 2003) und xlsx das neuere (ab Excel 2007). Wichtigste Unterschiede sind die maximale Tabellengröße (xls: 65.536×256, xlsx: 1.048.576×16.384) sowie die Komprimierung in xlsx-Dateien, so dass die Dateigröße deutlich schrumpft.

Schau mal in meinen Artikel Excel-Dateien in R einlesen und schreiben. Hier der R-Code zum Schreiben von xlsx und xls-Dateien (Package xlsx muss installiert sein)

library(xlsx)
write.xlsx(df, "dateiname.xlsx")

SPSS/SAS/STATA – Das Package foreign

Das Package foreign ist das Schweizer Taschenmesser der Statistikprogramm-Dateiformate, es versteht SPSS, SAS und STATA. Dabei schreibt foreign zwei Dateien, zum einen den Dataframe als Textdatei ohne Formatierung und zum anderen eine Codedatei (mit der entsprechenden Endung)

SPSS

library(foreign)
write.foreign(df, "dateiname.txt", "dateiname.sps",   package="SPSS")

SAS

library(foreign)
write.foreign(df, "dateiname.txt", "dateiname.sas",   package="SAS")

Optional kann noch der Datenname für SAS gewählt werden (dataname = „xyz“). Soweit ich weiß, gibt es kein Package, welches das SASb7dat-Format schreiben kann (wohl aber lesen). Optional

STATA

library(foreign)
write.dta(df, "df.dta")

 

Macht’s gut und happy Coding,

Euer Holger