Statistik und Datenanalyse mit Diagrammen
Ausführen: R installieren (r-project.org) und mit Rscript skript.R starten oder in RStudio bzw. der interaktiven Konsole (R) arbeiten.
<-; print, cat, paste zur Ausgabemtcars, iris, airquality?funktionRscript skript.R # Skript starten
Rscript -e 'print(1 + 2)' # eine Zeile
R # interaktive Konsole (beenden mit q())c(), 1:10, seq(), rep(); Indizes ab 1mean, median, sd, quantile, summary, tableNA für fehlende Werte: na.rm = TRUE, is.na()zahlen <- c(4, 8, 15, 16, 23, 42)
namen <- c("Mia", "Tom", "Zoe")
logisch <- c(TRUE, FALSE, TRUE)
zahlen
length(zahlen)
zahlen[1] # Indizes beginnen bei 1!
zahlen[c(1, 3)]
zahlen[2:4]
zahlen[-1] # alles außer dem ersten
zahlen[zahlen > 10] # Filter mit Bedingung
rev(zahlen)
c(1, "a", TRUE) # gemischt: alles wird zu Textfactor, levels, table, cut)matrix, m[zeile, spalte], apply, %*%, t$ und [[ ]], str() zeigt den Aufbaulapply/sapply/vapply/Map ersetzen Schleifennote <- 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"))data.frame(...): Spalten gleicher Länge; df$spalte, df[zeile, spalte]order()aggregate, tapply, split + sapplymerge(..., by =, all.x =)is.na, na.omit, complete.casesdf <- data.frame(
name = c("Mia", "Tom", "Zoe", "Ben", "Eva"),
alter = c(17, 25, 31, 9, 40),
stadt = c("Berlin", "Hamburg", "Berlin", "Köln", "Berlin"),
punkte = c(120, 80, 200, NA, 150),
stringsAsFactors = FALSE
)
df
str(df)
dim(df); nrow(df); ncol(df); names(df)
summary(df$alter)
df$name
df[2, ]
df[, "alter"]
df[df$alter > 18, ]
df[df$stadt == "Berlin", c("name", "punkte")]
df[order(-df$alter), ]if/else, for, while, repeat, switch; ifelse für Vektorenfunction(x, y = 1) { ... }; letzter Ausdruck ist der Rückgabewert; ... für beliebige Argumentesapply/vapply statt Schleifen<<- ändert äußere Variablen, tryCatch fängt Fehler und Warnungenx <- 7
if (x > 5) {
print("groß")
} else if (x > 2) {
print("mittel")
} else {
print("klein")
}
y <- if (x %% 2 == 0) "gerade" else "ungerade"
y
for (i in 1:3) cat("i =", i, "\n")
for (name in c("Mia", "Tom")) cat("Hallo", name, "\n")
n <- 3
while (n > 0) { cat(n, ""); n <- n - 1 }
cat("\n")
i <- 0
repeat { i <- i + 1; if (i == 2) next; if (i > 4) break; cat(i, "") }
cat("\n")
switch("b", a = "Apfel", b = "Birne", "unbekannt")
switch(2, "eins", "zwei", "drei")paste, sprintf, substr, strsplit, gsub, grepl, nchargrepl, sub, gsub, regmatchesas.Date, format, difftime, seq(by = "month"), POSIXct für Zeitenread.csv, write.csv, readLines, writeLines, saveRDSs <- "Hallo Welt, hallo R"
nchar(s)
toupper(s); tolower(s)
substr(s, 1, 5)
strsplit(s, ", ")[[1]]
strsplit("a,b;c", "[,;]")[[1]]
paste("a", "b", sep = "-"); paste0("x", 1:3); paste(c("a", "b"), collapse = "+")
sub("hallo", "Hi", s, ignore.case = TRUE)
gsub("l", "L", s)
grepl("Welt", s); grep("a", c("abc", "xyz", "bar")); grep("a", c("abc", "xyz", "bar"), value = TRUE)
regmatches(s, regexpr("[A-Z]\\w+", s))
regmatches("a1b22c333", gregexpr("[0-9]+", "a1b22c333"))[[1]]
sprintf("%s ist %d Jahre alt (%.1f m)", "Mia", 17L, 1.68)
sprintf("%05.1f|%-6s|%6s|%e", 3.14159, "ab", "cd", 12345.678)
format(1234567.891, big.mark = ".", decimal.mark = ",", nsmall = 2)
format(Sys.Date(), "%Y") >= "2025"
trimws(" getrimmt "); rev(strsplit("abc", "")[[1]]); startsWith("Hallo", "Ha"); endsWith("Hallo", "lo")
toupper(letters[1:5]); LETTERS[24:26]; month.name[1:2]
sprintf("%s", c("a", "b")); nchar(c("eins", "zwei", "drei")); sort(c("b", "A", "c"))
casefold("ABC", upper = FALSE); chartr("abc", "xyz", "aabbcc"); rev(utf8ToInt("A")); intToUtf8(c(72, 105))set.seed für reproduzierbaren Zufall; d/p/q/r + Verteilung (norm, binom, ...)mean, median, sd, quantile, cor, tablet.test, chisq.test, cor.test, shapiro.test, wilcox.test (p-Wert < 0,05: signifikant)lm(y ~ x), summary, predict, glm für logistische Regressionset.seed(42)
sample(1:6, 5, replace = TRUE)
round(rnorm(5, mean = 100, sd = 15), 1)
round(runif(3), 3)
sample(c("Kopf", "Zahl"), 6, replace = TRUE)
rbinom(5, size = 10, prob = 0.5)
sample(10)
dnorm(0) # Dichte
pnorm(1.96) # P(Z <= 1.96)
qnorm(0.975) # Quantil
dbinom(3, 10, 0.5) # P(X = 3)
pbinom(3, 10, 0.5)
ppois(2, 3)
round(punif(0.25), 2)
choose(5, 2); factorial(5)plot, hist, boxplot, barplot; speichern mit png() ... dev.off()ggplot2 baut Grafiken schichtweise (ggplot() + geom_*())dplyr, tidyr, readr) mit Pipe |> für lesbare Datenaufbereitunginstall.packages einmal, library je Sitzungpng("diagramm.png", width = 800, height = 500)
plot(mtcars$wt, mtcars$mpg, main = "Verbrauch und Gewicht",
xlab = "Gewicht (1000 lbs)", ylab = "Meilen pro Gallone",
pch = 19, col = "steelblue")
abline(lm(mpg ~ wt, data = mtcars), col = "red", lwd = 2)
legend("topright", legend = c("Autos", "Regression"), col = c("steelblue", "red"), pch = c(19, NA), lty = c(NA, 1))
dev.off()aggregate, merge, ordert.test, lm)ggplot2, Berichte mit Quartox[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