Datenstrukturen
| Struktur | Erzeugen | Zugriff |
|---|
| Vektor | c(1, 2, 3), 1:10 | v[2], v[v > 1], v["name"] |
| Matrix | matrix(1:6, nrow = 2) | m[i, j], m[i, ], m[, j] |
| Liste | list(a = 1, b = "x") | l$a, l[["a"]] |
| Data Frame | data.frame(x = 1:3, y = c("a", "b", "c")) | df$x, df[i, j], df[df$x > 1, ] |
| Faktor | factor(c("a", "b", "a")) | levels(f), table(f) |
Häufige Funktionen
| Aufgabe | Funktionen |
|---|
| Überblick | head tail str summary dim nrow ncol names class typeof |
| Kennzahlen | mean median sd var min max range quantile sum cumsum cor table |
| Sortieren | sort order rev rank |
| Zusammenfassen | aggregate tapply split sapply lapply apply table |
| Zusammenführen | merge rbind cbind |
| Text | paste paste0 sprintf nchar substr strsplit gsub grepl toupper trimws |
| Datum | Sys.Date as.Date format difftime seq weekdays |
| Dateien | read.csv write.csv readLines writeLines readRDS saveRDS file.exists |
| Zufall | set.seed sample rnorm runif rbinom |
Indizierung auf einen Blick
textx[3] drittes Element x[-3] ohne drittes
x[2:4] Bereich x[c(1, 5)] Auswahl
x[x > 5] Bedingung x["name"] nach Name
df[df$a > 1, c("a", "b")] Zeilen filtern, Spalten wählen
df[order(df$a, decreasing = TRUE), ] sortieren
Vergleich und Logik
== != < > <= >= · & | ! (elementweise) · && || (einzelner Wert, in if) · %in% (enthalten) · is.na() · isTRUE() · identical() · all.equal()
Typische Fehler
| Meldung / Problem | Ursache |
|---|
object 'x' not found | Tippfehler oder Variable nie definiert |
could not find function "f" | Paket nicht geladen (library) oder Tippfehler |
non-numeric argument to binary operator | Rechnen mit Text: as.numeric() |
subscript out of bounds | Index größer als Länge (Indizes beginnen bei 1) |
argument is of length zero | Vektor leer in if |
the condition has length > 1 | if mit Vektor: any(), all() oder ifelse() |
NAs introduced by coercion | Umwandlung scheiterte; Daten prüfen |
Ergebnis NA | fehlende Werte: na.rm = TRUE |
| Zahl mit Komma wird Text | read.csv2() oder dec = "," |
Vergleich 0.1 + 0.2 == 0.3 falsch | all.equal() verwenden |
Konventionen
- Zuweisung mit
<-, Namen in snake_case - Vektorisierung vor Schleifen
- Reproduzierbarkeit:
set.seed, relative Pfade, Projekte statt setwd() - Stil prüfen mit
lintr, formatieren mit styler
Weiterlernen
- R for Data Science (r4ds.hadley.nz, kostenlos)
- Hilfe:
?funktion, vignette("paket"), stackoverflow.com - Übungen: swirl (
install.packages("swirl")), Tidy Tuesday - Wiki dieser Seite: Artikel zu Statistik und Datenanalyse
Merke
- Alles ist ein Vektor; vektorisiert arbeiten
- Data Frames sind das Arbeitspferd;
aggregate, merge, order - Statistische Tests und Modelle sind eingebaut (
t.test, lm) - Grafik mit Base R oder
ggplot2, Berichte mit Quarto