Het factor-datatype definiëren
Als volgorde in een character
datatype echter wel belangrijk is, maken we gebruik van de factor
datatype. Een situatie waarbij dit handig is, is bijvoorbeeld namen van dagen en maanden. Laten we kijken wat de verschillen zijn als we hierbij geen gebruik maken van de factor
datatype en wanneer we dat wel doen.
#character
dagen1 <- c("maandag","dinsdag","woensdag","donderdag",
"vrijdag","zaterdag","zondag")
#factor
dagen2 <- factor(dagen1,levels=c("maandag","dinsdag","woensdag",
"donderdag","vrijdag","zaterdag",
"zondag"))
#numeric
aanwezigen <- c(9,8,6,9,3,1,0)
# De dataframe maken
bezetting <- data.frame(dagen1,dagen2,aanwezigen)
# De data frame laten zien
bezetting
## dagen1 dagen2 aanwezigen
## 1 maandag maandag 9
## 2 dinsdag dinsdag 8
## 3 woensdag woensdag 6
## 4 donderdag donderdag 9
## 5 vrijdag vrijdag 3
## 6 zaterdag zaterdag 1
## 7 zondag zondag 0
# Eigenschappen van de data frame
str(bezetting)
## 'data.frame': 7 obs. of 3 variables:
## $ dagen1 : Factor w/ 7 levels "dinsdag","donderdag",..: 3 1 5 2 4 6 7
## $ dagen2 : Factor w/ 7 levels "maandag","dinsdag",..: 1 2 3 4 5 6 7
## $ aanwezigen: num 9 8 6 9 3 1 0
We kunnen bij de laatste output al zien (achter de str()
functie dat voor de kolom dagen1
de volgorde er niet helemaal goed uitziet. Dit is bij dagen2
echter wel zo. Dit komt omdat we bij dagen2
expliciet hebben aangeven dat we een factor vector
willen hebben en daar duidelijk de volgorde in aangeven. Dit hebben we bij dagen1
niet gedaan. R kiest hiervoor zelf de volgorde, die in dit geval alfabetisch is. Om dit nog duidelijker te demonstreren, laten we de twee vectoren nog een keer gesorteerd zien:
# de character vector 'dagen1' gesorteerd weergeven
sort(dagen1, decreasing = FALSE)
## [1] "dinsdag" "donderdag" "maandag" "vrijdag" "woensdag" "zaterdag"
## [7] "zondag"
# de character vector 'dagen2' gesorteerd weergeven
sort(dagen2, decreasing = FALSE)
## [1] maandag dinsdag woensdag donderdag vrijdag zaterdag zondag
## Levels: maandag dinsdag woensdag donderdag vrijdag zaterdag zondag
Zoals je kunt zien, wordt de dagen1
vector simpelweg weergegeven in alfabetische volgorde. De dagen2
vector wordt echter weergegeven in de goede volgorde van de dagen in de week, zoals we dat bij de factor vector gedefinieerd hebben.
Voor de duidelijkheid geeft R ook het aantal niveaus aan in de factor vector. Dit kun je ook individueel weergeven met de levels()
functie:
levels(dagen2)
## [1] "maandag" "dinsdag" "woensdag" "donderdag" "vrijdag" "zaterdag"
## [7] "zondag"