EMZETT.
Login

Kurz: Ein Faktor speichert Kategorien (z. B. Geschlecht, Klasse) als feste Stufen (levels):

Teil des Kurses R

Kapitel 3 von 9 im Kurs R. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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 hoch

Matrizen

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.5

Listen

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   3

Unterschied: 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 9

Merke

  • 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/Map ersetzen 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

Weiter im Kurs

Zurück: Vektoren

Weiter: Data Frames

Alle Kapitel: R im Überblick