Ga naar hoofdinhoud

Subsetten van datasets in R

Subsetten van datasets is een cruciale vaardigheid voor elke dataprofessional. Leer en oefen met subsetten in deze snelle interactieve tutorial!
Bijgewerkt 2 okt 2026  · 6 min lezen

Verken met AI

ChatGPTClaudePerplexity

Of je nu vergelijkt hoe verschillende demografieën reageren op marketingcampagnes, inzoomt op een specifieke periode, of informatie ophaalt over een paar geselecteerde producten uit de voorraad: met subsetten haal je gerichte observaties uit je dataset. R is een geweldig hulpmiddel dat subsetten eenvoudig en intuïtief maakt. Aan het einde van deze tutorial weet je precies hoe je de informatie haalt die je uit je dataset wilt hebben.

Subsetten verandert de inhoud van je data niet, maar selecteert simpelweg het deel dat het meest relevant is voor je doel. In het algemeen zijn er drie manieren om de rijen en kolommen van je dataset te subsetten—op index, op naam en op waarde.

Subsetten van rijen en kolommen op index

Een manier om je rijen en kolommen te subsetten is via de indexen van je dataset. Dit komt overeen met het beschrijven van je rijen en kolommen als "de eerste rij", "alle rijen in de tweede en vijfde kolom" of "de eerste rij in de tweede tot en met de vijfde kolom". Laten we zulke formuleringen specificeren met een dataset genaamd iris in R. Uit de documentatie: "[D]eze beroemde (Fisher's of Anderson's) iris-dataset geeft de metingen in centimeters van de variabelen kelkbladlengte en -breedte en kroonbladlengte en -breedte voor 50 bloemen van elk van 3 soorten iris. De soorten zijn Iris setosa, versicolor en virginica."

# "De eerste rij": iris[1, ] # "Alle rijen in de tweede en vijfde kolom": iris[, c(2, 5)] # "De eerste rij in de tweede tot en met de vijfde kolom": iris[1, 2:5]

Om je data te subsetten, gebruik je rechte haken achter je dataobject. De rijen van je dataset geef je op als het eerste element binnen de haken, en de kolommen als het tweede, gescheiden door een komma:

data[rows, columns]

Subsetten van rijen en kolommen op naam

In R hebben de rijen en kolommen van je dataset naam-attributen. Rij­namen worden zelden gebruikt en geven standaard indexen—gehele getallen van 1 tot het aantal rijen in je dataset—net zoals je in de vorige sectie zag. Als je bijvoorbeeld rownames() aanroept op de iris-dataset, zie je dat deze gewoon van 1 tot 150 zijn geïndexeerd:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Rijnamen komen vaker voor in kleinere datasets en worden gebruikt om observaties in je dataset makkelijk herkenbaar te maken. Voor een kleine dataset met gezondheidsinformatie van patiënten van een arts zouden de rijnamen bijvoorbeeld de volledige namen van de patiënten kunnen zijn.

Kolomnamen daarentegen komen vrijwel in elke dataset voor. Je kunt deze benaderen met de functie colnames() of de functie names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Om je dataset te subsetten op de namen van je rijen en kolommen, gebruik je opnieuw de rechte haken, voorafgegaan door je dataobject:

# Kelkbladbreedte van de vijfde observatie iris["5", "Sepal.Width"] # Kelkbladbreedte en kroonbladbreedte iris[, c("Sepal.Width", "Petal.Width")]

Belangrijk om te onthouden: zowel de rij- als kolomnamen zijn characters, dus het gebruik van enkele of dubbele aanhalingstekens is absoluut noodzakelijk!

Subsetten van rijen en kolommen op waarde

Subsetten op waarde biedt vaak de meeste flexibiliteit. Zo kun je bijvoorbeeld de data over Iris setosa ophalen met een voorwaardelijke expressie zoals deze:

> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Voorwaardelijke expressies zoals iris$Species == "setosa" horen in het rij-element tussen de rechte haken (dus het eerste element vóór de komma). Naast de voorwaarde in het eerste element kun je in het tweede element kolommen op index of naam specificeren. Probeer hieronder in de console alleen de kelkbladmetingen van Iris setosa te selecteren:

# Print kelkbladmetingen voor setosa # Print kelkbladmetingen voor setosa (op naam) iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")] # Print kelkbladmetingen voor setosa (op index) iris[iris$Species == "setosa", 1:2] test_or( test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]', incorrect_msg = "Selecteer alleen de kolommen Sepal.Length en Sepal.Width voor de setosa-iris, op naam of op index."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecteer alleen de kolommen Sepal.Length en Sepal.Width voor de setosa-iris, op naam of op index.")) success_msg("Mooi werk!")

Samenvatting

In deze tutorial heb je:

  • Geleerd hoe je je data frame subset op index. Rijen en kolommen zijn geïndexeerd als gehele getallen van 1 tot respectievelijk het aantal rijen en kolommen.
  • Geleerd hoe je je data frame subset op naam. Je leerde dat rijnamen zelden gespecificeerd zijn en dat kolomnamen van het type character zijn.
  • Geleerd om voorwaardelijke expressies te gebruiken in het rij-element binnen rechte haken om je data frame op waarde te subsetten.
  • Geleerd om deze methoden te combineren voor flexibelere subsets (bijv. voorwaarden voor rijen en subsetten op index of naam voor kolommen).

Hieronder vind je enkele oefeningen om te oefenen met wat je hebt geleerd. Oefening baart kunst, dus ga ermee aan de slag!

Oefeningen

Selecteer alle observaties waarvoor de kelkbladbreedte groter is dan de kroonbladlengte.

# Welke observaties hebben een grotere kelkbladbreedte dan kroonbladlengte? # Welke observaties hebben een grotere kelkbladbreedte dan kroonbladlengte? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste("Selecteer de observaties waarvoor de waarden van Sepal.Width", "groter zijn dan de waarden van Petal.Length.")) success_msg("Netjes! Blijkt dat alleen Iris setosa deze vorm heeft.")
Gebruik iris$Sepal.Width > iris$Petal.Length binnen de rechte haken. Vergeet de komma niet!

Selecteer alle Iris versicolor waarvan de kelkbladbreedte groter is dan de gemiddelde kelkbladbreedte over alle soorten.

# Sla de versicolor-data op als een object genaamd versicolor # Selecteer alle Iris versicolor met een grotere dan gemiddelde kelkbladbreedte # Sla de versicolor-data op als een object genaamd versicolor versicolor <- iris[iris$Species == "versicolor", ] # Selecteer alle Iris versicolor met een grotere dan gemiddelde kelkbladbreedte versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = "Heb je het object versicolor gedefinieerd?", incorrect_msg = paste("Selecteer waar Species gelijk is aan \"versicolor\".", "Vergeet niet de operator == te gebruiken!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("Bijna! Gebruik je de functie mean()", "om de gemiddelde kelkbladbreedte over alle soorten te bepalen", "en niet alleen voor Iris versicolor?")) success_msg("Mooi werk!")
Gebruik de functie mean() om de gemiddelde kelkbladbreedte in iris te bepalen en gebruik vervolgens een voorwaardelijke expressie voorafgegaan door versicolor om alleen die rijen met bovengemiddelde waarden te selecteren.

Rapporteer de gemiddelde kelkbladbreedte voor alle Iris virginica met kroonbladlengtes kleiner dan 5 centimeter.

# Je bent vrij om dit probleem aan te pakken zoals je wilt! # Sla de virginica-data op als een object genaamd virginica virginica <- iris[iris$Species == "virginica", ] # Gemiddelde kelkbladbreedte voor Iris virginica met kroonbladlengtes kleiner dan 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = "Onjuist! Dit is een lastige!") success_msg("Uitstekend!")
Probeer eerst te subsetten op alle Iris virginica en daarna op waar Petal.Length kleiner is dan 5. Je vindt het gemiddelde met de functie mean().

Meer leren over andere manieren om inzichten uit je data te halen? Bekijk deze cursussen op DataCamp!

Bekijk ook onze tutorial Merging Datasets in R.

Of je nu vergelijkt hoe verschillende demografieën reageren op marketingcampagnes, inzoomt op een specifieke periode, of informatie ophaalt over een paar geselecteerde producten uit de voorraad: met subsetten haal je gerichte observaties uit je dataset. R is een geweldig hulpmiddel dat subsetten eenvoudig en intuïtief maakt. Aan het einde van deze tutorial weet je precies hoe je de informatie haalt die je uit je dataset wilt hebben.

Subsetten verandert de inhoud van je data niet, maar selecteert simpelweg het deel dat het meest relevant is voor je doel. In het algemeen zijn er drie manieren om de rijen en kolommen van je dataset te subsetten: op index, op naam en op waarde.

Subsetten van rijen en kolommen op index

Een manier om je rijen en kolommen te subsetten is via de indexen van je dataset. Dit komt overeen met het beschrijven van je rijen en kolommen als "de eerste rij", "alle rijen in de tweede en vijfde kolom" of "de eerste rij in de tweede tot en met de vijfde kolom". Laten we zulke formuleringen specificeren met een dataset genaamd iris in R. Uit de documentatie: "[D]eze beroemde (Fisher's of Anderson's) iris-dataset geeft de metingen in centimeters van de variabelen kelkbladlengte en -breedte en kroonbladlengte en -breedte voor 50 bloemen van elk van 3 soorten iris. De soorten zijn Iris setosa, versicolor en virginica."

# "De eerste rij": iris[1, ] # "Alle rijen in de tweede en vijfde kolom": iris[, c(2, 5)] # "De eerste rij in de tweede tot en met de vijfde kolom": iris[1, 2:5]

Om je data te subsetten, gebruik je rechte haken achter je dataobject. De rijen van je dataset geef je op als het eerste element binnen de haken, en de kolommen als het tweede, gescheiden door een komma:

data[rows, columns]

Subsetten van rijen en kolommen op naam

In R hebben de rijen en kolommen van je dataset naam-attributen. Rij­namen worden zelden gebruikt en geven standaard indexen—gehele getallen van 1 tot het aantal rijen in je dataset—net zoals je in de vorige sectie zag. Als je bijvoorbeeld rownames() aanroept op de iris-dataset, zie je dat deze gewoon van 1 tot 150 zijn geïndexeerd:

 > rownames(iris)
[1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"  "14"
[15] "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"  "27"  "28"
[29] "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39"  "40"  "41"  "42"
[43] "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52"  "53"  "54"  "55"  "56"
[57] "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65"  "66"  "67"  "68"  "69"  "70"
[71] "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78"  "79"  "80"  "81"  "82"  "83"  "84"
[85] "85"  "86"  "87"  "88"  "89"  "90"  "91"  "92"  "93"  "94"  "95"  "96"  "97"  "98"
[99] "99"  "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"

> nrow(iris)
[1] 150

Rijnamen komen vaker voor in kleinere datasets en worden gebruikt om observaties in je dataset makkelijk herkenbaar te maken. Voor een kleine dataset met gezondheidsinformatie van patiënten van een arts zouden de rijnamen bijvoorbeeld de volledige namen van de patiënten kunnen zijn.

Kolomnamen daarentegen komen vrijwel in elke dataset voor. Je kunt deze benaderen met de functie colnames() of de functie names():

colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Om je dataset te subsetten op de namen van je rijen en kolommen, gebruik je opnieuw de rechte haken, voorafgegaan door je dataobject:

# Kelkbladbreedte van de vijfde observatie iris["5", "Sepal.Width"] # Kelkbladbreedte en kroonbladbreedte iris[, c("Sepal.Width", "Petal.Width")]

Belangrijk om te onthouden: zowel de rij- als kolomnamen zijn characters, dus het gebruik van enkele of dubbele aanhalingstekens is absoluut noodzakelijk!

Subsetten van rijen en kolommen op waarde

Subsetten op waarde biedt vaak de meeste flexibiliteit. Zo kun je bijvoorbeeld de data over Iris setosa ophalen met een voorwaardelijke expressie zoals deze:

> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Voorwaardelijke expressies zoals iris$Species == "setosa" horen in het rij-element tussen de rechte haken (dus het eerste element vóór de komma). Naast de voorwaarde in het eerste element kun je in het tweede element kolommen op index of naam specificeren. Probeer hieronder in de console alleen de kelkbladmetingen van Iris setosa te selecteren:

# Print kelkbladmetingen voor setosa # Print kelkbladmetingen voor setosa (op naam) iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")] # Print kelkbladmetingen voor setosa (op index) iris[iris$Species == "setosa", 1:2] test_or( test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]', incorrect_msg = "Selecteer alleen de kolommen Sepal.Length en Sepal.Width voor de setosa-iris, op naam of op index."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecteer alleen de kolommen Sepal.Length en Sepal.Width voor de setosa-iris, op naam of op index.")) success_msg("Mooi werk!")

Samenvatting

In deze tutorial heb je:

  • Geleerd hoe je je data frame subset op index. Rijen en kolommen zijn geïndexeerd als gehele getallen van 1 tot respectievelijk het aantal rijen en kolommen.
  • Geleerd hoe je je data frame subset op naam. Je leerde dat rijnamen zelden gespecificeerd zijn en dat kolomnamen van het type character zijn.
  • Geleerd om voorwaardelijke expressies te gebruiken in het rij-element binnen rechte haken om je data frame op waarde te subsetten.
  • Geleerd om deze methoden te combineren voor flexibelere subsets (bijv. voorwaarden voor rijen en subsetten op index of naam voor kolommen).

Hieronder vind je enkele oefeningen om te oefenen met wat je hebt geleerd. Oefening baart kunst, dus ga ermee aan de slag!

Oefeningen

Selecteer alle observaties waarvoor de kelkbladbreedte groter is dan de kroonbladlengte.

# Welke observaties hebben een grotere kelkbladbreedte dan kroonbladlengte? # Welke observaties hebben een grotere kelkbladbreedte dan kroonbladlengte? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste("Selecteer de observaties waarvoor de waarden van Sepal.Width", "groter zijn dan de waarden van Petal.Length.")) success_msg("Netjes! Blijkt dat alleen Iris setosa deze vorm heeft.")
Gebruik iris$Sepal.Width > iris$Petal.Length binnen de rechte haken. Vergeet de komma niet!

Selecteer alle Iris versicolor waarvan de kelkbladbreedte groter is dan de gemiddelde kelkbladbreedte over alle soorten.

# Sla de versicolor-data op als een object genaamd versicolor # Selecteer alle Iris versicolor met een grotere dan gemiddelde kelkbladbreedte # Sla de versicolor-data op als een object genaamd versicolor versicolor <- iris[iris$Species == "versicolor", ] # Selecteer alle Iris versicolor met een grotere dan gemiddelde kelkbladbreedte versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = "Heb je het object versicolor gedefinieerd?", incorrect_msg = paste("Selecteer waar Species gelijk is aan \"versicolor\".", "Vergeet niet de operator == te gebruiken!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("Bijna! Gebruik je de functie mean()", "om de gemiddelde kelkbladbreedte over alle soorten te bepalen", "en niet alleen voor Iris versicolor?")) success_msg("Mooi werk!")
Gebruik de functie mean() om de gemiddelde kelkbladbreedte in iris te bepalen en gebruik vervolgens een voorwaardelijke expressie voorafgegaan door versicolor om alleen die rijen met bovengemiddelde waarden te selecteren.

Rapporteer de gemiddelde kelkbladbreedte voor alle Iris virginica met kroonbladlengtes kleiner dan 5 centimeter.

# Je bent vrij om dit probleem aan te pakken zoals je wilt! # Sla de virginica-data op als een object genaamd virginica virginica <- iris[iris$Species == "virginica", ] # Gemiddelde kelkbladbreedte voor Iris virginica met kroonbladlengtes kleiner dan 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = "Onjuist! Dit is een lastige!") success_msg("Uitstekend!")
Probeer eerst te subsetten op alle Iris virginica en daarna op waar Petal.Length kleiner is dan 5. Je vindt het gemiddelde met de functie mean().

Meer leren over andere manieren om inzichten uit je data te halen? Bekijk deze cursussen op DataCamp!

Bekijk ook onze tutorial Merging Datasets in R.

Onderwerpen
R
Data Science

Leer meer over R

Cursus

Data manipulatie met dplyr

4 uur
174.9K
Bouw Tidyverse-vaardigheden op door te leren hoe je data kunt transformeren en manipuleren met dplyr.
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