TSV- en bestanden met vaste breedte parsen
Gebruik read_tsv() en read_fwf() voor tabgescheiden gegevens en gegevens met vaste breedte.
TSV- en bestanden met vaste breedte parsen is een gratis R Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.
Verder dan CSV: andere bestandsindelingen
Niet alle tabelgegevens komen als CSV. Bestanden met tabscheiding (TSV), bestanden met een pipescheidingsteken en bestanden met een vaste breedte (FWF) komen veel voor in overheidsgegevens, oudere systemen en wetenschappelijke databases. Het pakket readr verwerkt ze allemaal met een consistente syntaxis.
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() — Door tabs gescheiden waarden
read_tsv() leest bestanden waarin tabs als scheidingstekens worden gebruikt. De functie heeft dezelfde argumenten als read_csv() — col_types, na, skip enzovoort. TSV heeft de voorkeur boven CSV wanneer de gegevens komma's bevatten, bijvoorbeeld in adressen of beschrijvingen.
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() — Elk scheidingsteken
read_delim(file, delim='|') verwerkt elk scheidingsteken van één teken. Bestanden met pipescheiding (|) komen veel voor in datawarehouses en overheidsexports, omdat pipes zelden in de gegevens zelf voorkomen.
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() voor bestanden met puntkomma's
Europese CSV-bestanden gebruiken vaak puntkomma's als scheidingstekens en komma's als decimaaltekens. read_csv2() is een verkorte vorm van read_delim(delim=';', locale=locale(decimal_mark=',')), maar je kunt read_delim() ook rechtstreeks configureren.
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() — Indeling met vaste breedte
Bestanden met een vaste breedte hebben geen scheidingstekens — kolommen worden geïdentificeerd aan de hand van hun tekenposities. Ze komen veel voor in exports van oudere mainframes en in overheidsgegevens. Gebruik fwf_widths() om kolombreedtes op te geven of fwf_cols() voor begin- en eindposities.
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() voor begin- en eindkolommen
fwf_positions(start, end, col_names) geeft de exacte begin- en eindposities van tekens op (met indexering vanaf 1). Dit is nauwkeurig wanneer kolombreedtes variëren of wanneer je bepaalde kolommen wilt overslaan door ze niet op te geven.
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() — Breedte automatisch detecteren
fwf_empty(file, col_names) probeert kolomgrenzen automatisch te detecteren op basis van witruimtes. Geef de kolomnamen afzonderlijk op. Dit werkt het best voor netjes opgemaakte FWF-bestanden met consistente tussenruimtes.
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() — Ruwe tekst parseren
read_lines(file) leest een tekstbestand regel voor regel en geeft een character-vector terug. Dit is de meest basale leesfunctie — gebruik deze wanneer je regels vooraf moet bewerken voordat je ze parseert, bijvoorbeeld om opmerkingen te filteren of inconsistente indelingen te verwerken.
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() voor stapsgewijze inspectie
read_lines(file, n_max=10) bekijkt alleen de eerste paar regels van een tekstbestand voordat je het volledig inleest. Dit is handig om coderingsproblemen vast te stellen, de werkelijke kopregel te vinden of het type scheidingsteken te detecteren.
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 CSVCoderingsproblemen verwerken
Niet-ASCII-tekens, zoals accenten en niet-Latijnse schriften, vereisen de juiste codering. Gebruik locale(encoding='latin1') of locale(encoding='UTF-8') binnen read_csv() of read_delim(). De standaard is 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')))De juiste reader kiezen
Een korte handleiding voor het kiezen van de juiste readr-functie:
- Komma's →
read_csv() - Puntkomma's + Europese decimalen →
read_csv2() - Tabs →
read_tsv() - Andere scheidingstekens →
read_delim(delim='|') - Vaste posities →
read_fwf() - Ruwe inspectie →
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)Korte controle
Welke readr-functie is de beste keuze voor het lezen van een bestand waarvan de kolommen door vaste tekenposities worden gedefinieerd (zonder scheidingstekens)?
Samenvatting: TSV- en bestanden met vaste breedte
Belangrijkste punten over platte bestandsindelingen die geen CSV zijn:
read_tsv()— door tabs gescheiden; het beste wanneer de gegevens komma's bevattenread_delim(delim='|')— elk scheidingsteken van één tekenread_csv2()— door puntkomma's gescheiden, met Europese decimaaltekensread_fwf(fwf_widths(c(10,5,8)))— vaste breedte op basis van kolombreedtesread_fwf(fwf_positions(start, end))— vaste breedte op basis van exacte positiesread_lines(file, n_max=10)— bekijkt ruwe regels vóór het parseren- Alle functies delen dezelfde argumenten
col_types,na,skipenlocale()
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)))Leer R met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 43
- Lessen
- 159
Veelgestelde vragen
Is de les “TSV- en bestanden met vaste breedte parsen” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “TSV- en bestanden met vaste breedte parsen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.
Wat leer ik in “TSV- en bestanden met vaste breedte parsen”?
Gebruik read_tsv() en read_fwf() voor tabgescheiden gegevens en gegevens met vaste breedte. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met R Academy te beginnen?
Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “TSV- en bestanden met vaste breedte parsen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over R Academy?
Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- CSV-bestanden lezen met read_csv()
- TSV- en bestanden met vaste breedte parsen
- Excel-bestanden importeren met readxl
- Gegevens naar meerdere indelingen schrijven