50% off DataCamp Premium. 700+ courses, half price. Start learning today.
Als je onze gratis Intro to R-cursus wilt volgen, hier is de link.
Factorniveaus
Wanneer je een dataset krijgt, zie je vaak dat deze factoren bevat met specifieke factorniveaus. Soms wil je de namen van deze niveaus aanpassen voor duidelijkheid of andere redenen. R laat je dit doen met de functie levels():
levels(factor_vector) <- c("name1", "name2",...)
Een goed voorbeeld is de ruwe data die je binnenkrijgt via een enquête. Een veelgestelde vraag in elke vragenlijst is het geslacht van de respondent. Hier zijn voor de eenvoud slechts twee categorieën vastgelegd, "M" en "F". (Voor enquêtegegevens heb je meestal meer categorieën nodig; in alle gevallen gebruik je een factor om de categorische data op te slaan.)
survey_vector <- c("M", "F", "F", "M", "M")
Het geslacht noteren met de afkortingen "M" en "F" kan handig zijn als je gegevens met pen en papier verzamelt, maar kan voor verwarring zorgen bij het analyseren. Op dat moment wil je de factorniveaus vaak wijzigen naar "Male" en "Female" in plaats van "M" en "F" voor de duidelijkheid.
Let op: de volgorde waarmee je de niveaus toewijst is belangrijk. Als je levels(factor_survey_vector) typt, zie je dat de uitvoer [1] "F" "M" is. Als je de niveaus van de factor niet specificeert bij het maken van de vector, wijst R ze automatisch alfabetisch toe. Om "F" correct aan "Female" en "M" aan "Male" te koppelen, moeten de niveaus in deze volgorde worden ingesteld op c("Female", "Male").
Instructies
- Bekijk de code die een factorvector opbouwt uit
survey_vector. Je gebruiktfactor_survey_vectorin de volgende opdracht. - Wijzig de factorniveaus van
factor_survey_vectornaarc("Female", "Male"). Let hier op de volgorde van de vectorelementen.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
msg = "Do not change the definition of survey_vector!" test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) msg = "Do not change or remove the code to create the factor vector." test_function("factor", "x", not_called_msg = msg, incorrect_msg = msg) # MC-note: ideally would want to test assign operator <-, and have it highlight whole line. # MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase # test_student_typed('c("Male", "Female")') test_object("factor_survey_vector", eq_condition = "equal", incorrect_msg = paste("Did you assign the correct factor levels to factor_survey_vector? Use levels(factor_survey_vector) <- c(\"Female\", \"Male\"). Remember that R is case sensitive!")) success_msg("Wonderful! Proceed to the next exercise.")
Let op de volgorde waarin je de factorniveaus moet invoeren. Tip: kijk naar de volgorde waarin de niveaus worden getoond wanneer je levels(factor_survey_vector) typt.
Een factor samenvatten
Na het afronden van deze cursus wordt een van je favoriete functies in R summary(). Deze geeft je snel een overzicht van de inhoud van een variabele:
summary(my_var)
Terug naar onze enquête: je wilt weten hoeveel "Male"-antwoorden je in je onderzoek hebt, en hoeveel "Female"-antwoorden. De functie summary() geeft je het antwoord op deze vraag.
Instructies
Vraag een summary() op van de survey_vector en factor_survey_vector. Interpreteer de resultaten van beide vectors. Zijn ze in dit geval allebei even nuttig?
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
# Generate summary for factor_survey_vector
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
summary(survey_vector)
# Generate summary for factor_survey_vector
summary(factor_survey_vector)
msg = "Do not change anything about the first few lines that define survey_vector and factor_survey_vector." test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg) msg <- "Have you correctly used summary() to generate a summary for %s?" test_output_contains("summary(survey_vector)", incorrect_msg = sprintf(msg, "survey_vector")) test_output_contains("summary(factor_survey_vector)", incorrect_msg = sprintf(msg, "factor_survey_vector")) success_msg("Nice! Have a look at the output. The fact that you identified \"Male\" and \"Female\" as factor levels in factor_survey_vector enables R to show the number of elements for each category.")
Roep de functie summary() aan voor zowel survey_vector als factor_survey_vector, zo eenvoudig is het!
Geordende factoren
Aangezien "Male" en "Female" ongeordende (of nominale) factorniveaus zijn, geeft R een waarschuwing dat de groter-dan-operator geen betekenis heeft. Zoals eerder gezien, koppelt R voor zulke factoren een gelijke waarde aan de niveaus.
Maar dat is niet altijd zo! Soms werk je ook met factoren die wél een natuurlijke ordening tussen categorieën hebben. In dat geval moeten we ervoor zorgen dat we deze informatie aan R doorgeven...
Stel dat je een onderzoeksteam van vijf data-analisten leidt en hun prestaties wilt evalueren. Hiervoor houd je hun snelheid bij, beoordeel je elke analist als "slow", "medium" of "fast", en sla je de resultaten op in speed_vector.
Instructies
Zet als eerste stap in speed_vector een vector met 5 waarden, één voor elke analist. Elke waarde moet "slow", "medium" of "fast" zijn. Gebruik onderstaande lijst:
- Analist 1 is medium,
- Analist 2 is slow,
- Analist 3 is slow,
- Analist 4 is medium en
- Analist 5 is fast.
Je hoeft nog niet te specificeren dat dit factoren zijn.
# Create speed_vector
speed_vector <-
# Create speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
test_object("speed_vector",
incorrect_msg = "speed_vector should be a vector with 5 entries, one for each analyst's speed rating. Don't use capital letters; R is case sensitive!") success_msg("A job well done! Continue to the next exercise.")
Wijs aan speed_vector een vector toe met de tekenreeksen "slow", "medium" of "fast".
Als je meer uit deze cursus wilt halen, hier is de link.
Bekijk ook onze Factors in R-tutorial.
Onderwerpen
