0Pricing
R Academy · Lektion

Daten in mehrere Formate schreiben

Exportieren Sie Data Frames mit write_csv() und writexl nach CSV, Excel und RDS.

Daten in mehrere Formate schreiben ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Daten aus R schreiben

Das Einlesen von Daten ist nur die halbe Aufgabe — Sie müssen Ergebnisse auch speichern. R unterstützt mehrere Ausgabeformate: CSV für universelle Kompatibilität, RDS zur exakten Bewahrung von R-Objekten, Parquet für leistungsstarke Analysen und weitere. Wählen Sie das Format passend zu Zielgruppe und Anwendungsfall.

library(readr)

# Create a sample data frame to write
df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = c('B','A','C'),
  passed = c(TRUE, TRUE, TRUE)
)

print(df)
cat('\nWe will save this in multiple formats!')

write_csv() — Als CSV speichern

write_csv(df, 'file.csv') speichert einen Dataframe als kommagetrennte Datei. Standardmäßig werden dabei im Gegensatz zu write.csv() keine Zeilennamen geschrieben. Das Ergebnis ist immer UTF-8-codiert. Die Funktion gibt den Dataframe unsichtbar zurück und kann daher in Pipes verwendet werden.

library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85, 92, 78)
)

# Write to /tmp for demonstration
write_csv(df, '/tmp/students.csv')

# Verify by reading back
read_csv('/tmp/students.csv', show_col_types=FALSE)

Optionen von write_csv()

write_csv() akzeptiert mehrere Optionen: na='NA' steuert, wie NAs geschrieben werden, append=TRUE hängt Daten an eine vorhandene Datei an, col_names=FALSE lässt die Kopfzeile weg und quote steuert, wann Felder in Anführungszeichen gesetzt werden.

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  city = c('New York','Los,Angeles'),  # Contains comma
  score = c(85, NA)
)

# na='' writes NA as empty string (common Excel convention)
write_csv(df, '/tmp/test_write.csv', na='')
cat(paste(read_lines('/tmp/test_write.csv'), collapse='\n'))

write_tsv() — Tabulatorgetrennte Ausgabe

write_tsv(df, 'file.tsv') speichert Daten mit Tabulatoren als Trennzeichen. Dieses Format eignet sich besonders, wenn die Daten Kommas enthalten oder das nachgelagerte System TSV erwartet. Es gelten dieselben Optionen wie bei write_csv().

library(readr)

df <- data.frame(
  address = c('123 Main St, NYC','456 Oak Ave, LA'),
  score = c(85, 92)
)

# TSV avoids delimiter conflict with commas in addresses
write_tsv(df, '/tmp/addresses.tsv')
cat(paste(read_lines('/tmp/addresses.tsv'), collapse='\n'))

saveRDS() — Beliebige R-Objekte speichern

saveRDS(obj, 'file.rds') serialisiert ein beliebiges R-Objekt im nativen Binärformat von R auf der Festplatte. readRDS('file.rds') stellt es exakt wieder her — einschließlich Spaltentypen, Faktoren, Attributen und sogar Modellobjekten. Das Format ist nicht für Menschen lesbar, aber problemlos zwischen R-Sitzungen übertragbar.

library(readr)

df <- data.frame(
  name = c('Alice','Bob'),
  score = c(85.5, 92.0),
  grade = factor(c('B','A'), levels=c('A','B','C','D'))
)

# Save with full type preservation
saveRDS(df, '/tmp/students.rds')

# Restore exactly
df2 <- readRDS('/tmp/students.rds')
print(df2)
print(class(df2$grade))  # factor — preserved!

saveRDS() vs. save() — Der entscheidende Unterschied

saveRDS(obj, 'file.rds') speichert ein einzelnes Objekt ohne seinen Namen. Mit readRDS() können Sie ihm einen beliebigen Namen zuweisen. save(obj1, obj2, 'file.RData') speichert mehrere benannte Objekte; load() stellt sie unter ihren ursprünglichen Namen wieder her (und kann vorhandene Variablen überschreiben).

# saveRDS: single object, flexible on load
model <- lm(mpg ~ wt, data=mtcars)
saveRDS(model, '/tmp/my_model.rds')
best_model <- readRDS('/tmp/my_model.rds')  # Any name!
cat('R-squared:', round(summary(best_model)$r.squared, 3), '\n')

# save: multiple named objects, fixed names on load
# save(model, mtcars, file='/tmp/workspace.RData')
# load('/tmp/workspace.RData')  # Restores 'model' and 'mtcars'

write_delim() — Benutzerdefiniertes Trennzeichen

write_delim(df, file, delim='|') schreibt Daten mit einem beliebigen Trennzeichen. Verwenden Sie diese Funktion, wenn das nachgelagerte System pipe-getrennte oder andere nicht standardisierte Formate erwartet. Es gelten dieselben Garantien für die Datenqualität wie bei write_csv().

library(readr)

df <- data.frame(
  id = 1:3,
  name = c('Alice','Bob','Carol'),
  value = c(100, 200, 150)
)

# Write pipe-delimited
write_delim(df, '/tmp/data.psv', delim='|')
cat(paste(read_lines('/tmp/data.psv'), collapse='\n'))

Excel-Ausgabe mit writexl

Das Paket writexl (das Gegenstück zu readxl) schreibt Dataframes im .xlsx-Format: writexl::write_xlsx(df, 'file.xlsx'). Für mehrere Blätter übergeben Sie eine benannte Liste. Dafür sind weder Java noch eine Excel-Installation erforderlich.

# writexl::write_xlsx() — example (library not always available)
# library(writexl)

df1 <- data.frame(name=c('Alice','Bob'), score=c(85,92))
df2 <- data.frame(region=c('East','West'), sales=c(100,200))

# Single sheet:
# write_xlsx(df1, '/tmp/students.xlsx')

# Multiple sheets (named list):
# write_xlsx(
#   list(students=df1, sales=df2),
#   '/tmp/report.xlsx'
# )

cat('writexl writes pure .xlsx without Java or Excel!')

Parquet-Dateien mit arrow

Apache Parquet ist ein spaltenorientiertes Speicherformat, das sich ideal für große Datensätze eignet: Es lässt sich gut komprimieren und liest bei spaltenorientierten Abfragen wesentlich schneller als CSV. Das Paket arrow stellt write_parquet() und read_parquet() bereit.

# arrow::write_parquet() concept
# library(arrow)

# Large CSV -> Parquet (10-100x smaller, 10-100x faster reads)
# df <- read_csv('big_file.csv')
# write_parquet(df, 'big_file.parquet')
# df_back <- read_parquet('big_file.parquet')

# Parquet benefits:
# - Columnar: only reads columns you need
# - Compressed: ~10x smaller than CSV
# - Typed: no type re-guessing on read
# - Partitioned: split by date/region for parallel reads

cat('Parquet is the modern standard for large-scale analytics in R!')

Daten in einer Pipeline schreiben

Sowohl write_csv() als auch saveRDS() geben ihre Eingabe unsichtbar zurück. Dadurch können sie innerhalb einer Pipe verwendet werden, ohne den Ablauf zu unterbrechen. Fügen Sie zum Beispiel mit einem write_csv()-Checkpoint einen Schreibschritt mitten in die Pipeline ein, um die Reproduzierbarkeit zu gewährleisten.

library(readr)
library(dplyr)

# Write mid-pipeline as a checkpoint
final_result <- data.frame(
  region=c('East','West','North'),
  sales=c(100,200,80)
) %>%
  mutate(pct = round(100*sales/sum(sales),1)) %>%
  {. ->> checkpoint_df; .} %>%  # Save checkpoint
  filter(sales > 90)

write_csv(checkpoint_df, '/tmp/checkpoint.csv')
print(final_result)

Leitfaden zur Formatauswahl

Welches Ausgabeformat geeignet ist, hängt von Ihrem Ziel ab:

  • CSV/TSV: universell einsetzbar, menschenlesbar und von allen zu öffnen
  • RDS: für R-zu-R, bewahrt alle Typen und Attribute exakt
  • xlsx: für Geschäftsanwender und Excel-Nutzer
  • Parquet: für große Datenmengen, Analysepipelines und Produktivsysteme
  • JSON: für APIs und verschachtelte/hierarchische Daten (jsonlite::toJSON())
library(readr)

df <- data.frame(
  id = 1:5,
  value = c(10.5, 20.3, 15.7, 30.1, 25.8)
)

# CSV — universal
write_csv(df, '/tmp/data.csv')

# TSV — when commas are in data
write_tsv(df, '/tmp/data.tsv')

# RDS — R-native, type-preserving
saveRDS(df, '/tmp/data.rds')

cat('Files created:\n')
cat('CSV size:', file.size('/tmp/data.csv'), 'bytes\n')
cat('RDS size:', file.size('/tmp/data.rds'), 'bytes\n')

Schnelltest

Welchen entscheidenden Vorteil bietet saveRDS() gegenüber write_csv() beim Speichern von R-Daten?

Zusammenfassung: Daten schreiben

Die wichtigsten Punkte zum Schreiben von Daten aus R:

  • write_csv(df, 'file.csv') — kommagetrennt, ohne Zeilennamen, UTF-8
  • write_tsv(df, 'file.tsv') — tabulatorgetrennte Ausgabe
  • write_delim(df, file, delim='|') — beliebiges Trennzeichen
  • saveRDS(obj, 'file.rds') — binäres R-Format, bewahrt alle Typen
  • readRDS('file.rds') — stellt das Objekt unter einem beliebigen Namen wieder her; load() verwendet die ursprünglichen Namen
  • writexl::write_xlsx() — Excel-Ausgabe ohne Java
  • arrow::write_parquet() — spaltenorientiertes Format für große analytische Datensätze
library(readr)

df <- data.frame(
  name = c('Alice','Bob','Carol'),
  score = c(85.5, 92.0, 78.3),
  grade = factor(c('B','A','C'))
)

# CSV: universal but loses factor
write_csv(df, '/tmp/demo.csv')
df_csv <- read_csv('/tmp/demo.csv', show_col_types=FALSE)
cat('CSV grade type:', class(df_csv$grade), '\n')  # character

# RDS: preserves factor
saveRDS(df, '/tmp/demo.rds')
df_rds <- readRDS('/tmp/demo.rds')
cat('RDS grade type:', class(df_rds$grade))  # factor

Häufig gestellte Fragen

Ist die Lektion „Daten in mehrere Formate schreiben“ kostenlos?

Ja — der vollständige Text von „Daten in mehrere Formate schreiben“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Daten in mehrere Formate schreiben“?

Exportieren Sie Data Frames mit write_csv() und writexl nach CSV, Excel und RDS. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um R Academy zu starten?

Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Daten in mehrere Formate schreiben“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?

Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. CSV-Dateien mit read_csv() lesen
  2. TSV- und Fixed-Width-Dateien parsen
  3. Excel-Dateien mit readxl importieren
  4. Daten in mehrere Formate schreiben
← Zurück zu R Academy