mijn_leeftijd <- 195 Data in R
R dient om met data te werken. Hoe ziet die data er dan uit? Hoe kan je ermee aan de slag?
5.1 Een eerste object maken
In de video wordt getoond hoe je je eerste object in R kan maken. Onder de video vind je de bijhorende uitleg in tekstvorm. Probeer het zeker ook zelf eens uit in RStudio!
In R zal je heel vaak met objecten werken. Laten we eerst kijken naar hoe je zulke objecten kan creëren.
Je kan gewoon een naam verzinnen voor het object dat je wil aanmaken en die naam in R typen. Je zal ook meteen iets “in” je object willen stoppen. Dat kan je doen met het symbool <-. Dit symbool noemen we de toekenningsoperator. Het bestaat uit twee tekens, namelijk < en -.
Je code ziet er dan bijvoorbeeld als volgt uit:
Ter herinnering: code uitvoeren doe je door tegelijk CTRL en Enter (Windows) of Command en Enter (Mac) in te tikken.
Wanneer je deze code uitvoert, maak je een object genaamd mijn_leeftijd. Dit object bevat nu één waarde, namelijk 19. In RStudio zie je dit object nu ook verschijnen in de lijst rechtsboven.
Je kan steeds opvragen wat de inhoud van een object is door de naam van het object te typen en deze code uit te voeren:
mijn_leeftijdIn de console zie je verschijnen:
[1] 19
Gelukt! Ben je al van je stoel gevallen van de mogelijkheden van R? Neen? Ok, dat is begrijpelijk, maar je kan er natuurlijk veel meer mee. In een volgend voorbeeld gaan we een stapje verder: een object met de naam leeftijden aanmaken dat meerdere gegevens bevat. Dit zijn bijvoorbeeld leeftijden van vijf leden van een basketbalteam.
Zo’n reeks van gegevens wordt ook een vector genoemd. Die kan je maken met de functie c(), zoals in dit voorbeeld:
leeftijden <- c(19, 22, 18, 22, 24)
De functie c() zorgt ervoor dat alles wat tussen haakjes staat als één samenhangend object wordt beschouwd door R.
Ook de inhoud van dit object kan je makkelijk terug oproepen.
leeftijden[1] 19 22 18 22 24
Het object leeftijden bevat inderdaad niet één getal, maar een reeks getallen. Deze getallen staan trouwens in een vaste volgorde.
Let erop dat R hoofdlettergevoelig is. Wanneer je het object leeftijden wil oproepen, mag je het dus niet schrijven met hoofdletter L. Doe je dat toch, dan krijg je een foutmelding object 'Leeftijden' not found. Dat komt omdat het object Leeftijden gewoon niet bestaat.
5.2 Een vector met namen
Een vector kan ook gegevens van het nominale meetniveau bevatten. Hoe je zo’n vector kan maken zie je in het filmpje. Eronder vind je de bijhorende uitleg in tekstvorm.
De term “data” of “gegevens” betekent niet automatisch dat het om kwantitatieve gegevens gaat. Het is even goed mogelijk om een vector met gegevens van het nominale meetniveau aan te maken. In het voorbeeld van het basketbalteam zou het bijvoorbeeld om de voornamen van de basketbalspelers kunnen gaan. Het enige verschil met de vector die hun leeftijden bevat, is dat de gegevens nu tussen aanhalingstekens moeten staan.
voornamen <- c("Laura", "Danira", "Stefanie", "Leyla", "Chelsy")
Het is belangrijk om te beseffen dat de vijf namen een vaste plaats hebben gekregen in de vector (net zoals eerder in de vector leeftijden). Laura staat op de eerste plaats, Danira op de tweede plaats, enzoverder.
Het is ook mogelijk om de namen afzonderlijk op te roepen. Dat kan door de naam van de vector te combineren met vierkante haakjes [ ], om bijvoorbeeld de derde voornaam uit de vector op te roepen:
voornamen[3][1] "Stefanie"
Je hebt dus een selectie gemaakt van enkel het derde element uit de vector. Wat zou volgens jou de output zijn als je het volgende commando zou ingeven?
voornamen[5]Klik hier om het antwoord te zien
Het 5e element uit de vector voornamen is “Chelsy”.
En wat met het volgende commando? Begrijp je welke selectie hier wordt gemaakt? Voer het commando zelf uit in RStudio en vergelijk de output met de vector voornamen.
voornamen[1:3]Klik hier om het antwoord te zien
Met dit commando selecteer je de elementen 1 tot en met 3 uit de vector. Hier zijn dat dus “Laura”, “Danira” en “Stefanie”.
5.3 Rugnummers
Verder wil je ook de rugnummers van de speelsters bijhouden. Dat werkt opnieuw zoals voorheen: met de functie c() stop je de rugnummers in een vector.
Even goed nadenken: wat is het meetniveau van de variabele rugnummers? Rugnummers zijn getallen, dus je zou denken dat dit precies werkt zoals in het voorbeeld met de leeftijden. Maar rugnummers zijn verschillend van leeftijden van mensen. Het zijn variabelen van het nominale meetniveau.
Als je (verkeerdelijk) de volgende code zou invoeren, dan denkt R dat deze vector gegevens bevat van interval- of rationiveau.
rugnummers_fout <- c(4, 12, 7, 76, 33)
Waarom is dat nu zo verkeerd? Omdat het lijkt alsof je uit deze vector informatie zou kunnen halen die er eigenlijk niet in zit. Bijvoorbeeld, uit de vector rugnummers_fout zou je het verschil kunnen berekenen tussen rugnummers van verschillende speelsters. Of je zou het gemiddelde rugnummer kunnen berekenen. Die berekeningen hebben echter geen betekenis.
Om dergelijke verwarring te voorkomen moet je de rugnummers in een vector stoppen zoals je ook de voornamen van de speelsters in een vector hebt opgeslagen: met dubbele aanhalingstekens. Op die manier weet R dat dit een nominale variabele is.
rugnummers <- c("4", "12", "7", "76", "33")
Nu zal R niet toelaten dat je bijvoorbeeld het verschil berekent tussen twee rugnummers. Je zal een foutmelding krijgen. En dat is terecht.
rugnummers[4]-rugnummers[2]Error in rugnummers[4] - rugnummers[2] :
non-numeric argument to binary operator
5.4 Een dataframe creëren
Bekijk de video voor een demonstratie. Onder de video vind je de uitleg in tekstvorm.
Om deze module af te ronden zullen we de vectoren die we hebben aangemaakt, samenbrengen in een dataframe. Wat is dat nu weer?
Een dataframe is niet meer dan een verzameling van vectoren van dezelfde lengte, die ook inhoudelijk bij elkaar horen. De vectoren die je eerder al hebt aangemaakt, kunnen als voorbeeld dienen. Voorlopig zijn dat drie losse vectoren. R weet niet dat ze bij elkaar horen.
voornamen <- c("Laura", "Danira", "Stefanie", "Leyla", "Chelsy")
leeftijden <- c(19, 22, 18, 22, 24)
rugnummers <- c("4", "12", "7", "76", "33")
Het dataframe maken doe je met de functie data.frame(). De verschillende vectoren die je in het dataframe wil stoppen zet je simpelweg tussen de haakjes. Je kan het object meteen ook een naam geven.
mijn_team <- data.frame(voornamen, leeftijden, rugnummers)
De functie data.frame() is een manier om aan R te zeggen dat de eerste waarde uit de vector voornamen hoort bij de eerste waarde uit de vector leeftijd en bij de eerste waarde uit de vector rugnummers. Hetzelfde geldt voor de tweede, derde,… waarde uit alle drie de vectoren. Natuurlijk is het heel belangrijk dat de volgorde van de data in de drie vectoren correct is: Laura is 19 jaar oud en heeft rugnummer 4, Danira is 22 en heeft rugnummer 12, enzovoort. Als dat niet zo is, dan zal je dataframe niet meer zijn dan een verwarrende hoop gegevens zonder structuur.
Vergeet niet dat R hoofdlettergevoelig is. Schrijf de naam van de functie data.frame() dus niet als Data.frame(). Anders krijg je een foutmelding:
mijn_team <- Data.frame(voornamen, leeftijden, rugnummers)Error in Data.frame(voornamen, leeftijden, rugnummers) :
could not find function "Data.frame"
Aan de hand van de zelfgekozen naam mijn_team kan je het object makkelijk weer oproepen:
mijn_team voornamen leeftijden rugnummers
1 Laura 19 4
2 Danira 22 12
3 Stefanie 18 7
4 Leyla 22 76
5 Chelsy 24 33
Het dataframe is dus een grotere structuur die meerdere vectoren bevat. Met het symbool \(\$\) kan je de afzonderlijke vectoren in het dataframe oproepen. Dat gaat bijvoorbeeld zo:
mijn_team$voornamen[1] "Laura" "Danira" "Stefanie" "Leyla" "Chelsy"
Uit deze vector kan je dan weer de individuele elementen selecteren met vierkante haakjes, zoals je eerder al hebt gedaan:
mijn_team$voornamen[4][1] "Leyla"
Met dat laatste commando zeg je eigenlijk “geef me het vierde element uit de vector voornamen uit het dataframe mijn_team”.
Wat zou het volgende commando opleveren als output? Denk even na en voer het commando dan uit in RStudio.
mijn_team$leeftijden[1]Klik hier om het antwoord te zien
[1] 19
Het dataframe is dus een grotere structuur met verschillende vectoren. Het is een soort rechthoekig “blok”, met rijen en kolommen in een vaste volgorde. Je kan uit dit dataframe ook op de volgende manier onderdelen selecteren:
mijn_team[2,3]
Met die code selecteer je het element op de tweede rij, uit de derde kolom. Kijk even terug naar het dataframe en zoek op welk element dit is. Voer de code uit. Klopt de output met wat je dacht?
Klik hier om het antwoord te zien
[1] "12"
5.5 Slot
In deze module heb je als een echte tovenaar nieuwe objecten gecreëerd uit het niets!
Je hebt die objecten bovendien een inhoud gegeven. Je weet dat die objecten ook vectoren kunnen zijn. Je kan die zelf aanmaken met de functie c().
Ten slotte kan je verschillende vectoren verzamelen in een dataframe met -niet zo verrassend- de functie data.frame().