Kurz: Ein Faktor speichert Kategorien (z. B. Geschlecht, Klasse) als feste Stufen (levels):
Teil des Kurses R
Faktoren: Kategorien
Ein Faktor speichert Kategorien (z. B. Geschlecht, Klasse) als feste Stufen (levels):
note <- factor(c("gut", "sehr gut", "gut", "ausreichend", "gut"),
levels = c("ausreichend", "gut", "sehr gut"), ordered = TRUE)
note
levels(note)
table(note)
as.integer(note)
note[1] < note[2]
summary(note)
nlevels(note)
droplevels(note[note != "sehr gut"])
cut(c(5, 15, 25, 35), breaks = c(0, 10, 20, 40), labels = c("niedrig", "mittel", "hoch"))Ausgabe:
[1] gut sehr gut gut ausreichend gut
Levels: ausreichend < gut < sehr gut
[1] "ausreichend" "gut" "sehr gut"
note
ausreichend gut sehr gut
1 3 1
[1] 2 3 2 1 2
[1] TRUE
ausreichend gut sehr gut
1 3 1
[1] 3
[1] gut gut ausreichend gut
Levels: ausreichend < gut
[1] niedrig mittel hoch hoch
Levels: niedrig mittel hochMatrizen
Eine Matrix ist ein zweidimensionaler Vektor gleichen Typs:
m <- matrix(1:6, nrow = 2)
m
dim(m); nrow(m); ncol(m)
m[2, 3] # Zeile 2, Spalte 3
m[1, ] # erste Zeile
m[, 2] # zweite Spalte
t(m) # transponieren
m * 10
m %*% t(m) # Matrixprodukt
rbind(m, 7:9)
cbind(m, c(0, 0))
rownames(m) <- c("a", "b")
colnames(m) <- c("x", "y", "z")
m
apply(m, 1, sum) # Zeilensummen
apply(m, 2, mean) # Spaltenmittel
rowSums(m); colMeans(m)
diag(2)
solve(matrix(c(2, 0, 0, 2), 2))Ausgabe:
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[1] 2 3
[1] 2
[1] 3
[1] 6
[1] 1 3 5
[1] 3 4
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[,1] [,2] [,3]
[1,] 10 30 50
[2,] 20 40 60
[,1] [,2]
[1,] 35 44
[2,] 44 56
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 7 8 9
[,1] [,2] [,3] [,4]
[1,] 1 3 5 0
[2,] 2 4 6 0
x y z
a 1 3 5
b 2 4 6
a b
9 12
x y z
1.5 3.5 5.5
a b
9 12
x y z
1.5 3.5 5.5
[,1] [,2]
[1,] 1 0
[2,] 0 1
[,1] [,2]
[1,] 0.5 0.0
[2,] 0.0 0.5Listen
Eine Liste kann Elemente verschiedenen Typs und verschiedener Länge enthalten:
person <- list(name = "Mia", alter = 17, hobbys = c("Lesen", "Judo"), aktiv = TRUE)
person$name
person[["alter"]]
person$hobbys[2]
person$stadt <- "Berlin"
names(person)
length(person)
person[["alter"]] <- NULL # Element entfernen
str(person)
unlist(list(a = 1, b = list(c = 2, d = 3)))Ausgabe:
[1] "Mia"
[1] 17
[1] "Judo"
[1] "name" "alter" "hobbys" "aktiv" "stadt"
[1] 5
List of 4
$ name : chr "Mia"
$ hobbys: chr [1:2] "Lesen" "Judo"
$ aktiv : logi TRUE
$ stadt : chr "Berlin"
a b.c b.d
1 2 3Unterschied: person["name"] liefert eine Liste mit einem Element, person[["name"]] oder person$name den Inhalt.
Listen bearbeiten: lapply, sapply, Map
zahlen <- list(a = 1:5, b = c(10, 20, 30), c = c(7, 7))
lapply(zahlen, mean)
sapply(zahlen, mean)
sapply(zahlen, length)
sapply(zahlen, range)
vapply(zahlen, function(v) sum(v) > 20, logical(1))
Map(function(x, n) x * n, 1:3, 4:6)
Filter(function(v) length(v) > 2, zahlen)
Reduce(`+`, 1:5, accumulate = TRUE)
do.call(rbind, list(1:3, 4:6))
mapply(function(a, b) a + b, 1:3, 4:6)Ausgabe:
$a
[1] 3
$b
[1] 20
$c
[1] 7
a b c
3 20 7
a b c
5 3 2
a b c
[1,] 1 10 7
[2,] 5 30 7
a b c
FALSE TRUE FALSE
[[1]]
[1] 4
[[2]]
[1] 10
[[3]]
[1] 18
$a
[1] 1 2 3 4 5
$b
[1] 10 20 30
[1] 1 3 6 10 15
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[1] 5 7 9Merke
- Faktoren für Kategorien (
factor,levels,table,cut) - Matrizen:
matrix,m[zeile, spalte],apply,%*%,t - Listen: gemischte Typen, Zugriff mit
$und[[ ]],str()zeigt den Aufbau lapply/sapply/vapply/Mapersetzen Schleifen
Übungsaufgabe
Lege eine Liste mit drei numerischen Vektoren an und berechne mit sapply je den Mittelwert und das Maximum.
Quiz zur Selbstkontrolle
] im Unterschied zu person["name"]?
- Den Inhalt statt einer Teilliste (richtig)
- Eine Matrix
- Einen Faktor
- Einen Fehler
Wofür steht apply(m, 1, sum)?
- Summe jeder Zeile einer Matrix (richtig)
- Summe jeder Spalte
- Gesamtsumme
- Transponieren
Wofür ist ein Faktor gedacht?
- Kategorische Daten mit festen Stufen (richtig)
- Ganze Zahlen
- Texte beliebiger Länge
- Datumswerte
Weiter im Kurs
Zurück: Vektoren
Weiter: Data Frames
Alle Kapitel: R im Überblick