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!
· 6 min lezen

Verken met AI

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
        

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?
        

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
        

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!
        

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
        

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?
        

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
        

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!
        

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

Gerelateerd