Kurs
Wenn du unseren kostenlosen Intro-to-R-Kurs machen möchtest, findest du hier den Link.
Faktorstufen
Wenn du ein neues Datenset erhältst, fällt dir oft auf, dass es Faktoren mit bestimmten Faktorstufen enthält. Manchmal willst du diese Stufennamen für mehr Klarheit oder aus anderen Gründen anpassen. R ermöglicht dir das mit der Funktion levels():
levels(factor_vector) <- c("name1", "name2",...)
Ein gutes Beispiel sind Rohdaten aus einer Umfrage. Eine typische Frage ist das Geschlecht der befragten Person. Der Einfachheit halber wurden hier nur zwei Kategorien erfasst, "M" und "F". (In echten Befragungen brauchst du in der Regel mehr Kategorien; in jedem Fall nutzt du einen Faktor, um kategoriale Daten zu speichern.)
survey_vector <- c("M", "F", "F", "M", "M")
Die Erfassung mit den Kürzeln "M" und "F" ist praktisch, wenn Daten per Stift und Papier gesammelt werden, kann aber bei der Analyse zu Verwirrung führen. Dann möchtest du die Faktorstufen oft zu "Male" und "Female" ausschreiben statt "M" und "F", um es eindeutiger zu machen.
Achtung: Die Reihenfolge, in der du die Stufen zuweist, ist wichtig. Wenn du levels(factor_survey_vector) eintippst, siehst du die Ausgabe [1] "F" "M". Wenn du beim Erstellen des Vektors die Stufen nicht angibst, weist R sie alphabetisch zu. Damit "F" korrekt "Female" und "M" korrekt "Male" zugeordnet wird, müssen die Stufen in dieser Reihenfolge auf c("Female", "Male") gesetzt werden.
Anleitung
- Sieh dir den Code an, der aus
survey_vectoreinen Faktorvektor baut. Du brauchstfactor_survey_vectorin der nächsten Aufgabe. - Ändere die Faktorstufen von
factor_survey_vectorzuc("Female", "Male"). Achte auf die Reihenfolge der Vektorelemente.
# 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.")
Achte auf die Reihenfolge, in der du die Faktorstufen eintippst. Tipp: Schau dir die Reihenfolge an, in der die Stufen ausgegeben werden, wenn du levels(factor_survey_vector) eingibst.
Einen Faktor zusammenfassen
Nach diesem Kurs wird summary() eine deiner Lieblingsfunktionen in R sein. Sie liefert dir einen schnellen Überblick über den Inhalt einer Variable:
summary(my_var)
Zurück zu unserer Umfrage: Du möchtest wissen, wie viele "Male"-Antworten und wie viele "Female"-Antworten in deiner Studie vorliegen. Die Funktion summary() liefert dir die Antwort.
Anleitung
Fordere eine summary() von survey_vector und factor_survey_vector an. Interpretiere die Ergebnisse beider Vektoren. Sind sie in diesem Fall gleichermaßen hilfreich?
# 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.")
Rufe die Funktion summary() sowohl für survey_vector als auch für factor_survey_vector auf, mehr ist nicht nötig!
Geordnete Faktoren
Da "Male" und "Female" ungeordnete (nominale) Faktorstufen sind, gibt R eine Warnung aus, dass der Größer-als-Operator hier nicht sinnvoll ist. Wie schon gesehen, behandelt R die Stufen solcher Faktoren als gleichwertig.
Das ist aber nicht immer so. Manchmal arbeitest du mit Faktoren, deren Kategorien eine natürliche Reihenfolge haben. In diesem Fall müssen wir R diese Information mitgeben ...
Angenommen, du leitest ein Forschungsteam aus fünf Datenanalysten und willst ihre Performance bewerten. Dazu trackst du ihre Geschwindigkeit, bewertest jede Person als "slow", "medium" oder "fast" und speicherst die Ergebnisse in speed_vector.
Anleitung
Weise im ersten Schritt speed_vector einen Vektor mit 5 Einträgen zu, einen pro Analyst. Jeder Eintrag soll entweder "slow", "medium" oder "fast" sein. Verwende folgende Liste:
- Analyst 1 ist medium,
- Analyst 2 ist slow,
- Analyst 3 ist slow,
- Analyst 4 ist medium und
- Analyst 5 ist fast.
Du musst noch nicht angeben, dass es sich um Faktoren handelt.
# 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.")
Weise speed_vector einen Vektor mit den Zeichenketten "slow", "medium" oder "fast" zu.
Wenn du mehr aus diesem Kurs mitnehmen möchtest, hier ist der Link.
Sieh dir auch unser Factors in R Tutorial an.