Ga naar hoofdinhoud

Data subsetten in R: selecteren, filteren en data extraheren

Leer hoe je data frames in R subset met brackets [], subset(), en dplyr. Inclusief codevoorbeelden en een vergelijking van methoden.
Bijgewerkt 2 okt 2026  · 6 min lezen

Verken met AI

ChatGPTClaudePerplexity

Bijna elk R-data-analyseproject vereist dat je specifieke rijen, kolommen of waarden uit een grotere dataset haalt. Subsetten is hoe je dat in R doet: met bracketnotatie [] voor laagdrempelige indexeercontrole, de functie subset() voor leesbare, voorwaardelijke filtering, of dplyr-werkwoorden zoals filter() en select() voor moderne datapijplijnen.

TL;DR

  • Gebruik bracketnotatie df[rows, cols] voor positi gebaseerde selectie van rijen en kolommen

  • Gebruik $ om één kolom als vector te extraheren: df$column_name

  • Gebruik subset(df, condition) voor leesbare, voorwaardelijke filtering in interactieve sessies

  • Voeg drop = FALSE toe wanneer je één kolom selecteert om het resultaat als data frame te behouden

  • Geef voor productietcode en datapijplijnen de voorkeur aan bracketnotatie of dplyr::filter() boven subset()

Rijen selecteren

Hier is een voorbeeld van subsetten op een data frame genaamd debt.

debt[3:6, ]
      name  payment
3      Dan      150
4      Rob       50
5      Rob       75
6      Rob      100

De syntaxis df[rows, columns] is de basis van subsetten in R. Hier selecteert 3:6 de rijen 3 t/m 6, en de lege ruimte na de komma betekent "geef alle kolommen terug". Het resultaat is een kleiner data frame met dezelfde kolomstructuur als het origineel.

Rijen selecteren uit een specifieke kolom

Let op de vereenvoudiging die optreedt wanneer je één enkele kolom selecteert. Als je de eerste drie rijen van alleen de kolom payment selecteert, wordt het resultaat vereenvoudigd tot een vector.

debt[1:3, 2]
100 200 150

De 2 verwijst hier naar de tweede kolom van debt, namelijk payment. Omdat we één kolom selecteerden, laat R de dataframe-structuur vallen en geeft een gewone numerieke vector terug.

Dataframe-opmaak

Wil je het als dataframe behouden, voeg dan simpelweg drop = FALSE toe zoals hieronder: 

debt[1:3, 2, drop = FALSE]
    payment
1       100
2       200
3       150

Een specifieke kolom selecteren

Je kunt ook één kolom selecteren met de $-operator door dataframe$column te schrijven. In het volgende voorbeeld halen we de kolom payment uit debt. R geeft het resultaat terug als een vector in plaats van een data frame.

debt$payment
100 200 150 50 75 100

De functie subset() gebruiken

Als je complexere subsets wilt maken of een subset op basis van een voorwaarde, is de volgende stap de functie subset(). Stel dat je de schulden van iemand met de naam Dan wilt bekijken. Je zou gewoon de brackets kunnen gebruiken om zijn schuld te selecteren en op te tellen, maar dat is niet erg robuust, zeker niet bij mogelijke wijzigingen in de dataset.

# Dit werkt, maar is niet informatief
debt[1:3, ]

subset() op een categorische variabele

Een betere manier is om de functie subset() te gebruiken om de rijen te selecteren waar de kolom name gelijk is aan Dan. Let op dat er een dubbele is-gelijkteken (==) nodig is, een relationele operator.

# Dit werkt, maar is niet informatief en niet robuust
debt[1:3, ]

# Veel informatiever!
subset(debt, name == "Dan")
      name     payment
1      Dan         100
2      Dan         200
3      Dan         150

Het resultaat bevat alleen de drie rijen waar name gelijk is aan "Dan". Merk op dat de oorspronkelijke rijnummers (1, 2, 3) behouden blijven, wat helpt om resultaten terug te leiden naar het bron-dataframe.

subset() op een numerieke variabele

We kunnen ook subsetten op numerieke kolommen. Als we rijen willen zien waar payments gelijk zijn aan $100, doe je het volgende:

subset(debt, payment == 100)
      name  payment
1      Dan      100
6      Rob      100

Twee rijen voldoen aan de voorwaarde: rij 1 (Dan) en rij 6 (Rob) hebben allebei betalingen van exact $100. Dit laat zien dat subset() elke rij scant, ongeacht de naam, en alle overeenkomsten teruggeeft.

Dataframes benaderen en subsetten

Wat als je alleen de kasstromen van bedrijf A nodig hebt? Hier filtert de functie subset() rijen uit een ander dataframe, cash:

subset(cash, company == "A")
      company  cash_flow  year
1           A       1000     1
2           A       4000     3
3           A        550     4

Onthoud:

  • Het eerste argument dat je aan subset() doorgeeft is de naam van je dataframe, cash.

  • Let op dat je company niet tussen aanhalingstekens moet zetten!

  • De == is de gelijkheidsoperator. Die test waar twee dingen gelijk zijn en geeft een logische vector terug.

Interactief voorbeeld van de subset()-methode

In het volgende voorbeeld gebruiken we subset() om rijen van cash te selecteren die horen bij bedrijf B, en filteren we vervolgens op kasstromen die over 1 jaar vervallen.

# Rijen over bedrijf B
subset(cash, company == "B")

# Rijen met kasstromen die over 1 jaar vervallen
subset(cash, year == 1)

Als je bovenstaande code uitvoert, levert dat het volgende resultaat op:

  company cash_flow year
4       B      1500    1
5       B      1100    2
6       B       750    4
7       B      6000    5
  company cash_flow year
1       A      1000    1
4       B      1500    1

Probeer het zelf in onze cursus Introduction to R for Finance.

Deze content is afkomstig uit DataCamp’s cursus Introduction to R for Finance door Lore Dirick.

Subsetten met dplyr

Het tidyverse-pakket dplyr biedt een modern alternatief voor het subsetten van dataframes. De functie filter() selecteert rijen en select() kiest kolommen, beide met een pipe-gebaseerde syntaxis waarmee je bewerkingen aan elkaar kunt koppelen.

library(dplyr)

# Filter rijen waar name "Dan" is
debt %>% filter(name == "Dan")

# Selecteer alleen de kolom payment (blijft een data frame)
debt %>% select(payment)

# Combineer: filter rijen en selecteer kolommen in één pipeline
debt %>%
  filter(payment >= 100) %>%
  select(name, payment)

In tegenstelling tot subset() werken dplyr-functies betrouwbaar binnen andere functies en verwerken ze gegroepeerde operaties, joins en samenvattingen in dezelfde pipeline. Als je data-analyseworkflows opbouwt in plaats van losse query’s uit te voeren, is dplyr de standaardtool.

Vergelijking van subsetmethoden

Laten we de verschillende subsetmethoden in R vergelijken in een tabel:

Methode Syntaxis Beste voor Opmerkingen
Brackets [] df[rows, cols] Fijnmazige controle, programmeren Werkt op alle R-objecten
$ df$col Snel één kolom extraheren Geeft een vector terug, geen data frame
subset() subset(df, cond) Interactieve filtering Niet aanbevolen binnen functies
dplyr::filter() df %>% filter(cond) Datapijplijnen, leesbare code Vereist het dplyr-pakket

Tot slot

R biedt meerdere manieren om te subsetten: bracketnotatie [] voor volledige controle, subset() voor leesbare, interactieve filtering, en dplyr::filter() voor datapijplijnen. Brackets werken op elk R-object, subset() leest prettig voor ad-hoc verkenning, en dplyr schaalt goed wanneer je meerdere bewerkingen aaneenrijgt.

Wil je dieper in datamanipulatie met R, bekijk dan de cursus Data Manipulation with dplyr of de cursus Introduction to the Tidyverse op DataCamp.

Subsetten in R: veelgestelde vragen

Wat is het verschil tussen subset() en dplyr::filter() in R?

Beide functies filteren rijen op basis van voorwaarden, maar ze gedragen zich anders in programmeercontexten. subset() gebruikt non-standard evaluation, wat het handig maakt voor interactief gebruik maar onbetrouwbaar binnen door de gebruiker gedefinieerde functies. dplyr::filter() is ontworpen om veilig binnen functies te werken en integreert met de pipe-operator (%>%) om meerdere datamanipulatiestappen aan elkaar te schakelen.

Hoe subset ik meerdere kolommen tegelijk in R?

Je kunt een vector met kolomnamen of indexen tussen de brackets meegeven. Bijvoorbeeld, df[, c("name", "payment")] selecteert twee kolommen op naam, terwijl df[, c(1, 3)] ze op positie selecteert. Met dplyr kun je select(df, name, payment) gebruiken of helperfuncties zoals starts_with() en contains() om kolommen op patroon te matchen.

Waarom geeft het selecteren van één kolom in R een vector terug in plaats van een data frame?

R vereenvoudigt het resultaat standaard wanneer slechts één kolom wordt geselecteerd met bracketnotatie. Dit gedrag wordt bepaald door de parameter drop, die standaard op TRUE staat. Om het resultaat als data frame te behouden, voeg je drop = FALSE toe aan je bracketexpressie, bijvoorbeeld df[, 2, drop = FALSE].

Kan ik rijen subsetten op basis van meerdere voorwaarden in R?

Ja. Je kunt voorwaarden combineren met de operatoren & (EN) en | (OF). Bijvoorbeeld, subset(df, name == "Dan" & payment > 100) geeft rijen terug waar de naam Dan is en de betaling hoger is dan 100. Met dplyr kun je voorwaarden scheiden met komma’s binnen filter(): df %>% filter(name == "Dan", payment > 100).

Onderwerpen
R
Data Science

Topcursussen in R

Cursus

Introductie tot R

4 uur
3.1M
Beheers de basis van data-analyse in R, inclusief vectors, lists en data frames, en oefen met echte datasets.
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