R Academy · Les

TSV- en bestanden met vaste breedte parsen

Gebruik read_tsv() en read_fwf() voor tabgescheiden gegevens en gegevens met vaste breedte.

Les 2 van 413 stappen

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 overheids­exports, 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 CSV

Coderingsproblemen 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 bevatten
  • read_delim(delim='|') — elk scheidingsteken van één teken
  • read_csv2() — door puntkomma's gescheiden, met Europese decimaaltekens
  • read_fwf(fwf_widths(c(10,5,8))) — vaste breedte op basis van kolombreedtes
  • read_fwf(fwf_positions(start, end)) — vaste breedte op basis van exacte posities
  • read_lines(file, n_max=10) — bekijkt ruwe regels vóór het parseren
  • Alle functies delen dezelfde argumenten col_types, na, skip en 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)))
Gratis beginnen

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

  1. CSV-bestanden lezen met read_csv()
  2. TSV- en bestanden met vaste breedte parsen
  3. Excel-bestanden importeren met readxl
  4. Gegevens naar meerdere indelingen schrijven
← Terug naar R Academy