Ga naar hoofdinhoud

Excel-bestanden lezen en importeren in R met readxl

In dit artikel leer je hoe je Excel-bestanden in R importeert met de readxl-bibliotheek.
Bijgewerkt 2 okt 2026  · 5 min lezen

Verken met AI

ChatGPTClaudePerplexity

Hoewel veel organisaties data opslaan in databases en opslagopties zoals AWS, Azure en GCP, worden Microsoft Excel-spreadsheets nog steeds veel gebruikt voor kleinere datasets.

De data science-functionaliteit van Excel is beperkter dan die van R, dus is het handig om data uit spreadsheets in R te kunnen importeren.

In deze tutorial behandelen we het inlezen van Excel-werkbladen (en specifieke rijen en kolommen) in R met het readxl-pakket.

Om dit te kunnen volgen, heb je basiskennis van R nodig. 

Voor een algemenere gids over het importeren van veel verschillende bestandstypen in R, lees How to Import Data Into R: A Tutorial.

Het Excel-bestand

De dataset die we in R gaan inlezen is klein en heeft slechts twee tabbladen, zodat we kunnen laten zien hoe je het juiste tabblad kiest. Je vindt het bestand hier.

Het eerste tabblad is een bankmarketing-dataset met 45.211 rijen en 17 kolommen. De onderstaande screenshot komt uit het Excel-bestand “sample.xlsx” en het tabblad “bank-full”.

Screenshot 2023-03-08 at 9.05.49 PM.png

Het tweede tabblad is de Iris-dataset met 150 rijen en 6 kolommen en bevat informatie over irissoorten, zoals de lengte en breedte van kelk- en kroonbladen. De onderstaande screenshot komt uit hetzelfde Excel-bestand, “sample.xlsx”, en het tabblad “iris”. 

Screenshot 2023-03-08 at 9.08.53 PM.png

Overzicht van pakketten

Deze tutorial gebruikt het readxl-pakket. Het openxlsx-pakket is een prima alternatief dat ook kan wegschrijven naar XLSX-bestanden, maar het integreert minder goed met tidyverse-pakketten zoals dplyr en tidyr.

Om Excel-bestanden te lezen met het readxl-pakket, moeten we het pakket eerst installeren en het vervolgens importeren met de functie “library”.

install.packages("readxl")

Je ziet onderstaande output in de console, wat wijst op een succesvolle installatie.

trying URL 'https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.2/readxl_1.4.2.tgz'
Content type 'application/x-gzip' length 1545782 bytes (1.5 MB)
==================================================
downloaded 1.5 MB


The downloaded binary packages are in
/var/folders/mq/46mc_8tj06n0wh2xjkk08r140000gn/T//RtmpHIGYqM/downloaded_packages

Om “readxl”-methoden te gebruiken, voer je onderstaande opdracht uit in de R-console.

library(readxl)

Let op: het openxlsx-pakket is een ander goed alternatief om naar XLSX-bestanden te schrijven.

Het eerste werkblad lezen

Laten we alle data van het eerste werkblad, “bank-full”, inlezen met read_xlsx() en alleen het path-argument.

bank_df <- read_xlsx(path = "sample.xlsx")

De resulterende data is een tibble.

Screenshot 2023-03-09 at 7.40.15 AM.png

Je kunt read_excel() op dezelfde manier gebruiken als read_xlsx(), en alle argumenten die je in de volgende secties ziet werken vergelijkbaar met deze functie. read_excel() probeert te raden of je een XLSX-spreadsheet hebt of het oudere XLS-spreadsheettype.

bank_df <- read_excel(path = "sample.xlsx")

Screenshot 2023-03-09 at 7.40.15 AM (1).png

Andere werkbladen lezen

Laten we nu alle data van het tweede werkblad, dus “iris”, inlezen met de functie read_xlsx() en het sheet-argument.

iris <- read_xlsx("sample.xlsx", sheet = "iris")

Screenshot 2023-03-09 at 7.12.08 AM.png

Je kunt ook het bladnummer opgeven in het sheet-argument in plaats van de bladnaam.

iris2 <- read_xlsx("sample.xlsx", sheet = 1)

Screenshot 2023-03-09 at 7.12.21 AM.png

Specifieke rijen lezen

Laten we specifieke rijen uit een werkblad lezen door de argumenten skip en n_max in te stellen. Om de eerste paar rijen over te slaan, kun je het skip-argument gebruiken met een waarde gelijk aan het aantal rijen dat je wilt overslaan.

bank_df_s2 <- read_excel("sample.xlsx", sheet = "bank-full", skip = 2)

Houd er rekening mee dat de bovenstaande code ook de kolomkoppen overslaat. Je leert in de volgende secties hoe je kolomkoppen expliciet kunt opgeven in de functie read_xlsx().

Screenshot 2023-03-09 at 7.17.01 AM.png

Op vergelijkbare wijze kun je om de eerste n rijen te lezen het argument n_max opgeven in de functie read_xlsx(). Onderstaande code leest de eerste 1000 rijen van het tabblad “bank-full”.

bank_df_n1k <- read_excel("sample.xlsx", sheet = "bank-full", n_max = 1000)

Screenshot 2023-03-09 at 7.18.41 AM.png

Je kunt beide argumenten ook combineren om eerst een aantal rijen over te slaan en vervolgens een specifiek aantal rijen uit de resterende dataset te lezen.

Specifieke cellen lezen

Met de argumenten “skip” en “n_max” kun je een subset van de rijen van de data lezen, maar je kunt specifieke cellen uit een werkblad lezen door het argument range in te stellen.

Er zijn twee notaties om de subset van de dataset te specificeren:

  • A1-notatie (E4:G8) - A staat voor de kolom en 1 staat voor het rijnummer.
  • R1C1-notatie (R4C5:R8C7) - Rownummer en kolomnummer zijn expliciet gedefinieerd

Het idee is dat je de coördinaten opgeeft van de rechthoek die je uit de dataset wilt knippen.

Notatie 1:

bank_df_range1 <- read_excel("sample.xlsx", sheet = "bank-full", range = "A3:E10")

Notatie 2:

bank_df_range2 <- read_excel("sample.xlsx", sheet = "bank-full", 

                 range = "R3C1:R10C5")

Met range kun je ook de bladnaam opnemen in het argument (voorbeeld: wbook!E4:G8).

bank_df_range3 <- read_excel("sample.xlsx", range = "bank-full!R3C1:R10C5")

Data lezen zonder header-rij

Laten we data lezen zonder header-rij door het argument col_names in te stellen op een character vector. 

PS: We gebruiken eerst het skip-argument om de header-rij te verwijderen.

columns <- c("ID", "Sepal Length", "Sepal Width", "Petal Length", "Petal Width", "Species Name")

iris3 <- read_excel("sample.xlsx", sheet = 2, skip = 1, col_names = columns)

Screenshot 2023-03-09 at 7.19.30 AM.png

Kopnamen repareren

In de vorige sectie waren de headers die we opgaven spatiegescheiden. Je kunt kopnamen omzetten naar syntactische R-variabelen met het argument .name_repair = "universal".

iris4 <- read_excel("sample.xlsx", sheet = 2, skip = 1,
                  col_names = columns, .name_repair = "universal")

Screenshot 2023-03-09 at 7.19.56 AM.png

Kolomtypes specificeren

Standaard raadt R bij het inlezen van een Excel-bestand het datatypen van elke variabele.  Laten we de kolomtypes bekijken van de iris-dataset die met de standaardargumenten is ingelezen.

sapply(iris, class)
  Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Om de gok van de kolomtypes te overschrijven, kun je het argument col_types gebruiken.

iris5 <- read_excel("sample.xlsx", sheet = 2,
      col_types = c("numeric", "numeric", "numeric", "numeric", "numeric", "text"))

sapply(iris5, class)
    Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Screenshot 2023-03-09 at 7.20.14 AM.png

Je kunt R ook de kolomtypes van geselecteerde variabelen laten raden door voor een bepaalde kolom de waarde “guess” op te geven bij col_types.

iris6 <- read_excel("sample.xlsx", sheet = 2,
        col_types = c("guess", "numeric", "numeric", "numeric", "numeric", "text"))

sapply(iris6, class)
Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Screenshot 2023-03-09 at 7.20.27 AM.png

Kolommen overslaan

Je hoort vaak: hoe meer data, hoe beter. Maar in veel use-cases blijken sommige variabelen/kolommen geen enkel signaal te bevatten, bijvoorbeeld om een van de onderstaande redenen. 

  • hoge kardinaliteit: bijna elke waarde is anders
  • nul kardinaliteit: elke waarde is hetzelfde
  • niet relevant voor de businesscase
  • te veel missende waarden
  • te veel rommelwaarden

Je kunt het inlezen van sommige kolommen overslaan door voor col_types de waarde "skip" in te stellen, zoals hieronder gedemonstreerd.

iris7 <- read_excel("sample.xlsx", sheet = 2,
            col_types = c("numeric", "skip", "skip", "numeric", "numeric", "text"))

sapply(iris7, class)

Screenshot 2023-03-09 at 7.20.36 AM.pngTil het naar een hoger niveau

In een wereld waarin data in een enorm tempo en in allerlei vormen wordt gegenereerd, moet je programmeertaal het lezen van deze datatypes ondersteunen. R is een van die krachtige talen die dit mogelijk maken. Schrijf je in voor de cursus “Introduction to Importing Data in R” om te leren hoe R pakketten biedt om uiteenlopende datasets te importeren. Deze cursus bevat tutorials en quizzen om je begrip van data importeren in R te versterken.

Veelgestelde vragen

Kan R voor projecten zowel CSV- als Excel-data importeren?

Ja, R kan voor projecten zowel CSV- als Excel-data importeren, en R biedt robuuste pakketten en functies om beide formaten te verwerken. Lees onze gids over CSV vs. Excel voor een gedetailleerde vergelijking en advies over de juiste keuze voor je dataprojecten.

Onderwerpen
R
Data Science
Spreadsheets

Leer meer over R en spreadsheets

Cursus

Google Sheets voor gevorderden

4 uur
58K
Breid je kennis van Google Spreadsheets uit door je te verdiepen in datatypes, zoals numerieke gegevens, logische gegevens en ontbrekende gegevens.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken