TSV- und Fixed-Width-Dateien parsen
Verwenden Sie read_tsv() und read_fwf() für tabulatorgetrennte Daten und Daten mit fester Breite.
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 CSVProbleme 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 enthaltenread_delim(delim='|')— beliebiges einstellige Trennzeichenread_csv2()— semikolongetrennt mit europäischen Dezimaltrennzeichenread_fwf(fwf_widths(c(10,5,8)))— feste Breite anhand von Spaltenbreitenread_fwf(fwf_positions(start, end))— feste Breite anhand exakter Positionenread_lines(file, n_max=10)— unverarbeitete Zeilen vor dem Parsen untersuchen- Alle Funktionen verwenden dieselben Argumente
col_types,na,skipundlocale()
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)))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
- CSV-Dateien mit read_csv() lesen
- TSV- und Fixed-Width-Dateien parsen
- Excel-Dateien mit readxl importieren
- Daten in mehrere Formate schreiben