Daten IO

Da es sich bei R um eine statistische Programmierumgebung handelt, ist eine grundlegende Eigenschaft Dateien zu importieren und exportieren. Wir betrachten zuerst die Fälle eines Datenimports aus

  • einer Textdatei
  • einer Excel-Datei
  • einem anderen Statistikprogramm

Dateninput aus einer Textdatei

Die Daten in der Textdatei datei seien tabellenförmig angelegt. Dabei werden verschiedene Möglichkeiten zur Trennung der einzelnen Elemente unterschieden. Es existieren eine Reihe von Funktionen für die verschiedenen Kombinationen aus Trennelement und Dezimaltrennzeichen.

> read.delim(datei,)  # Tabulator getrennt, dec="."
> read.delim(datei,sep="|")  # | getrennt
> read.delim2(datei,)  # Tabulator getrennt, dec=","
> read.csv(datei)  # Komma getrennt, dec="."
> read.csv2(datei) # Strichpunkt getrennt, dec=","

Diese Funktionen sind Spezialfälle der Funktion read.table(). Jede dieser Funktionen erzeugt ein Objekt der Klasse data.frame.

Excel Dateien

Die einfachste Möglichkeit eine Excel Datei einzulesen besteht darin diese im csv Format zu speichern und dann mit der Funktion read.csv2() zu arbeiten, z.B.

> read.csv2(datei,sep=";",dec=".",...)

falls man ; als Trennelement und . als Dezimaltrennzeichen beim der Abspeichern csv Datei gewählt hat. Excel Dateien können aber natürlich auch direkt eingelesen werden, z.B. mit der Funktion read.xlsx() aus dem Paket xlsx

> library(xlsx)
> xls_file <- read.xlsx("test.xlsx", sheetIndex = 1)
> class(xls_file)
## [1] "data.frame"

Dateien aus anderen Statistikprogrammen

Das Paket foreign enthält eine Reihe von Funktionen zum Einlesen von Output-Dateien anderen Statistik-Programme

> foreign::read.dta   # liest Stata Dateien
> foreign::read.spss  # liest SPSS Dateien
> foreign::read.xport # liest SAS Dateien

Daten speichern

Innerhalb von R werden Daten typischerweise in einem Data Frame abgespeichert. Um nun den Inhalt eines Data Frames in eine Datei zu speichern, verwendet man die Funktion write.table() (und ihre Varianten, siehe ?write.table).

> df <- data.frame(eins = 1:2, zwei = letters[1:2])
> write.csv(df, file = "bsp_daten_speichern.csv", row.names = FALSE)
> read.csv(file = "bsp_daten_speichern.csv")
##   eins zwei
## 1    1    a
## 2    2    b

R Objekte

Wir wissen bereits, dass wir mit save() eine Reihe von R Objekten und mit save.image() den kompletten Workspace abspeichern können. Mit load() kann dann der Inhalt einer .Rdata Datei (Speicherformat von save()) neu geladen werden. R Objekte, die mit save() abgespeichert werden, behalten beim erneuten Laden ihren ursprünglichen Namen. Mit saveRDS() kann zwar nur ein Objekt abgespeichert werden, diesem kann man aber beim erneuten Einlesen mit readRDS() einen neuen Namen geben.

> save(df, file = "bsp_save.Rdata")
> rm(df)
> load("bsp_save.Rdata")
> saveRDS(df, file = "bsp_saveRDS.rds")
> df_neu <- readRDS("bsp_saveRDS.rds")
> identical(df, df_neu)
## [1] TRUE

Weitere Möglichkeiten

Eine Übersicht weiterer Import-/Exportmöglichkeiten findet man z.B. im R programming Wikibook unter dem Link "Importing and Exporting Data".