Möchten wir hinsichtlich der Variable Geschlecht unterscheiden, würden wir die Kreuztabellen mit anderen Variablen einzeln per xtab() oder table() erstellen.
… oder Prozenttabellen erstellen. Um die Prozentwerte zeilenweise zu bilden, muss der Parameter margin=1 angegeben werden. Für spaltenweises Vorgehen gilt margin=2.
dummy <-rbind(tbl.list[[1]], tbl.list[[2]], tbl.list[[3]])# erzeuge ein Datenframe aus den Zeilennamen und den Wertendummy <-data.frame( row.names(dummy), dummy )# lösche die alten Rownamesrownames(dummy) <-NULLdummy
Da die Funktion apply() eine Typkonversion in die Klasse matrix vornimmt, (und somit alle Datentypen auf den kleinsten gemeinsamen Nenner character zurückfallen, siehe die Anführungszeichen im Output) muss bei Bedarf zurück in die Klasse data.frame konvertiert werden.
# vertausche Spalten und Zeilen as.data.frame(apply(datensatz, MARGIN=1, FUN=function(x) {x}))
## V1 V2 V3 V4 V5 V6
## Name Hans Caro Lars Ines Samira Peter
## Geschlecht maennlich weiblich intersexuell weiblich weiblich maennlich
## Lieblingsfarbe gruen blau gelb schwarz gelb gruen
## Einkommen 1233 800 2400 4000 899 1100
## V7
## Name Sarah
## Geschlecht weiblich
## Lieblingsfarbe blau
## Einkommen 1900
34.4 Klassen für Variablen bilden (klassieren)
Ich möchte die Werte einer Variable in Kategorien bzw. Klassen einteilen.
Angenommen, meine Variable enthält Werte zwischen 0 und 500, und ich möchte diese Werte in die Gruppen “0-70”, “71-200”, “201-400”, “>400”, klassieren, wie gehe ich dann vor?
34.4.1 R base
Im klassischen R erstellen wir zunächst zufällige Zahlen zwischen 0 und 500.
# erzeuge 200 Zufallszahlen von 0 bis 500dummy <-sample(0:500, 200)# bzw. direkt als Dataframedummy <-data.frame(x =sample(0:500, 200))
Nun erzeugen wir die neue Variable xKAT, in welcher die Klassierung angegeben werden soll.
# wir bilden Kategorien# "0-70"# "71-200"# "201-400"# "> 400"# und speichern das in die neue Variable xKATdummy$xKAT[dummy$x <71] <-"0-70"dummy$xKAT[dummy$x <201& dummy$x >70] <-"71-200"dummy$xKAT[dummy$x <401& dummy$x >200] <-"201-400"dummy$xKAT[dummy$x >400] <-"größer 400"
Anschließend wandeln wir die neue Variable in einen ordinalen Faktor mit korrekter Levelreihenfolge.
Zunächst laden wir das tidyverse-Paket und erstellen uns zufällige Zahlen zwischen 0 und 500.
# lade tidyverselibrary(tidyverse)# erzeuge 200 Zufallszahlen von 0 bis 500dummy <-sample(0:500, 200)# bzw. direkt als Tibbledummy <-tibble(x =sample(0:500, 200))
Nun erzeugen wir die neue Variable xKAT, in welcher die Klassierung angegeben werden soll. Hierfür nutzen wir innerhalb von mutate() die ifelse()-Funktion. Diese folgte der Logik “WELCHE - WAS -ANSONSTEN”. In einem ersten beispielhaften Schritt wählen wir all “x < 71” aus, speichern für diese Fälle den character-Wert “0-70”, und bei allen anderen Fällen ein “NA”.
dummy %>%# ifelse(WELCHE, WAS, ANSONSTEN)mutate(xKAT =ifelse(x <71 , "0-70", NA))
Es lassen sich mehrere ifelse()-Ausdrücke kombinieren, indem diese vor den NA-Ausdruck geschrieben werden. Dabei sammeln sich die Klammer-Zu Symbole ) an, kommen Sie hier nicht durcheinander!
# Das lässt sich erweitern, indem der ", NA"-Ausdruck nach hinten wandertdummy %>%mutate(xKAT =ifelse(x <71 , "0-70",ifelse(x <201& x >70 , "71-200",NA)))
Der vollständige Befehl zur Klassierung lautet demnach:
# wir bilden Kategorien# "0-70"# "71-200"# "201-400"# "> 400"# und speichern das in die neue Variable xKATdummy %>%mutate(xKAT =ifelse(x <71 , "0-70",ifelse(x <201& x >70 , "71-200",ifelse(x <401& x >200 , "201-400",ifelse(x >400 , "> 400",NA)))))
Wenn - so wie hier - mehrere Konditionen angegeben werden, ist die Funktion case_when() etwas einfacher zu schreiben und zu lesen als die ifelse()-Staffelungen.
# nutze case_when() an Stelle von ifelse()dummy %>%mutate(xKAT =case_when(x <71~"0-70", x <201& x >70~"71-200", x <401& x >200~"201-400", x >400~"größer 400") )
Anschließend wandeln wir die neue Variable in einen ordinalen Faktor mit korrekter Levelreihenfolge.
# die neue Variable als ordinalen Factor mit korrekter# Levelreihenfolge speicherndummy <- dummy %>%mutate(xKAT =case_when(x <71~"0-70", x <201& x >70~"71-200", x <401& x >200~"201-400", x >400~"größer 400"),xKAT =factor(xKAT, levels=c("0-70","71-200","201-400","größer 400"),ordered=TRUE) )head(dummy$xKAT)