R Academy · Lektion

TSV- und Fixed-Width-Dateien parsen

Verwenden Sie read_tsv() und read_fwf() für tabulatorgetrennte Daten und Daten mit fester Breite.

Lektion 2 von 413 Schritte

TSV- und Fixed-Width-Dateien parsen ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Über CSV hinaus: Weitere Dateiformate

Nicht alle tabellarischen Daten liegen als CSV vor. Tabulatorgetrennte Dateien (TSV), Pipe-getrennte Dateien und Dateien mit fester Breite (FWF) sind in Behördendaten, Altsystemen und wissenschaftlichen Datenbanken weit verbreitet. Das Paket readr verarbeitet sie alle mit einer einheitlichen Syntax.

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — Tabulatorgetrennte Werte

read_tsv() liest tabulatorgetrennte Dateien ein. Es verwendet dieselben Argumente wie read_csv() — col_types, na, skip usw. TSV wird CSV vorgezogen, wenn die Daten Kommas enthalten (z. B. in Adressen oder Beschreibungen).

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — Beliebiges Trennzeichen

read_delim(file, delim='|') verarbeitet beliebige einstellige Trennzeichen. Pipe-getrennte Dateien (|) sind in Data Warehouses und behördlichen Exporten üblich, da Pipes in den Daten selbst selten vorkommen.

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() für Dateien mit Semikolontrennung

Europäische CSV-Dateien verwenden häufig Semikolons als Trennzeichen und Kommas als Dezimaltrennzeichen. read_csv2() ist eine Kurzform für read_delim(delim=';', locale=locale(decimal_mark=',')); alternativ können Sie read_delim() direkt konfigurieren.

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — Format mit fester Breite

Dateien mit fester Breite haben keine Trennzeichen — die Spalten werden anhand ihrer Zeichenpositionen identifiziert. Dieses Format kommt häufig bei Exporten aus älteren Mainframe-Systemen und bei Behördendaten vor. Verwenden Sie fwf_widths(), um Spaltenbreiten anzugeben, oder fwf_cols() für Start- und Endpositionen.

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

fwf_positions() für Start- und Endspalten

fwf_positions(start, end, col_names) gibt die exakten Start- und Endpositionen von Zeichen an (beginnend bei 1). Das ist präzise, wenn die Spaltenbreiten variieren oder wenn Sie einige Spalten überspringen möchten, indem Sie sie nicht angeben.

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — Breite automatisch erkennen

fwf_empty(file, col_names) versucht, Spaltengrenzen automatisch anhand von Leerzeichen zu erkennen. Geben Sie die Spaltennamen separat an. Die Funktion eignet sich am besten für sauber formatierte FWF-Dateien mit gleichmäßigen Abständen.

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — Unverarbeitete Textdaten einlesen

read_lines(file) liest eine Textdatei Zeile für Zeile ein und gibt einen Character-Vektor zurück. Dies ist die niedrigste Ebene der Einlesefunktionen — verwenden Sie sie, wenn Sie Zeilen vor dem Parsen vorverarbeiten müssen (z. B. Kommentare filtern oder uneinheitliche Formate behandeln).

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

read_lines() zur schrittweisen Untersuchung

read_lines(file, n_max=10) zeigt zunächst nur die ersten Zeilen einer beliebigen Textdatei in der Vorschau an, bevor Sie sie vollständig einlesen. Das ist nützlich, um Probleme mit der Zeichenkodierung zu diagnostizieren, die tatsächliche Kopfzeile zu finden oder den Typ des Trennzeichens zu erkennen.

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

Probleme mit der Zeichenkodierung behandeln

Nicht-ASCII-Zeichen (Akzente, nichtlateinische Schriften) erfordern die Angabe der richtigen Zeichenkodierung. Verwenden Sie locale(encoding='latin1') oder locale(encoding='UTF-8') innerhalb von read_csv() oder read_delim(). Die Standardeinstellung ist UTF-8.

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

Die richtige Einlesefunktion auswählen

Kurzübersicht zur Auswahl der passenden readr-Funktion:

  • Kommas → read_csv()
  • Semikolons und europäische Dezimaltrennzeichen → read_csv2()
  • Tabulatoren → read_tsv()
  • Andere Trennzeichen → read_delim(delim='|')
  • Feste Positionen → read_fwf()
  • Unverarbeitete Untersuchung → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

Kurztest

Welche readr-Funktion eignet sich am besten zum Einlesen einer Datei, deren Spalten durch feste Zeichenpositionen definiert sind (ohne Trennzeichen)?

Zusammenfassung: TSV- und Dateien mit fester Breite

Die wichtigsten Erkenntnisse zu Flatfile-Formaten ohne CSV:

  • read_tsv() — tabulatorgetrennt; am besten geeignet, wenn die Daten Kommas enthalten
  • read_delim(delim='|') — beliebiges einstellige Trennzeichen
  • read_csv2() — semikolongetrennt mit europäischen Dezimaltrennzeichen
  • read_fwf(fwf_widths(c(10,5,8))) — feste Breite anhand von Spaltenbreiten
  • read_fwf(fwf_positions(start, end)) — feste Breite anhand exakter Positionen
  • read_lines(file, n_max=10) — unverarbeitete Zeilen vor dem Parsen untersuchen
  • Alle Funktionen verwenden dieselben Argumente col_types, na, skip und locale()
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))
Kostenlos starten

Lerne R mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
43
Lektionen
159

Häufig gestellte Fragen

Ist die Lektion „TSV- und Fixed-Width-Dateien parsen“ kostenlos?

Ja — der vollständige Text von „TSV- und Fixed-Width-Dateien parsen“ 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 „TSV- und Fixed-Width-Dateien parsen“?

Verwenden Sie read_tsv() und read_fwf() für tabulatorgetrennte Daten und Daten mit fester Breite. 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 2 von 4.

Wie lange dauert die Lektion „TSV- und Fixed-Width-Dateien parsen“?

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