sin(sqrt(exp(1.5)))[1] 0.8545027
2026-03-19
“Happy families are all alike; every unhappy family is unhappy in its own way.” — Leo Tolstoy
“Tidy datasets are all alike, but every messy dataset is messy in its own way.” — Hadley Wickham
Tidy data (aufgeräumte Daten)
→ Nicht immer so eindeutig, wie es hier klingt
|>Mit geschachtelten Funktionen
→ Zuerst wird \(e^{1.5}\) berechnet, dann die Wurzel gezogen und danach der Sinus ermittelt
Mit Pipe-Operator
→ Operator |> fügt linke Seite als erstes Argument der Funktion rechts ein
select() und rename()
select()select()- werden entferntselect()neuer_name = alter_namestarts_with() und ends_with() Muster für Namen festlegen-rename()neuer_name = alter_namefilter() und slice()
&|NA entfernenslice()n (Anzahl) Beobachtungen auswählenhead wie Kopf und tail wie Schwanz oder Enden (Anzahl) Beobachtungen auswählenmin wie Minimum und max wie Maximumarrange()
desc() absteigend sortierenmutate()
neue_variable = Ausdruck(alte_variablen)signif() auf eine signifikante Stellte gerundet# A tibble: 20,710 × 4
Datum Fahrzeug Abstand Geschwindigkeit
<chr> <chr> <dbl> <dbl>
1 13.12.2017 00:03:31 PKW 262. 70
2 13.12.2017 00:03:37 PKW 5.18 59
3 13.12.2017 00:03:53 PKW 15.7 79
4 13.12.2017 00:05:42 PKW 111. 58
5 13.12.2017 00:06:51 PKW 69.5 60
6 13.12.2017 00:07:08 Transporter 16.7 57
7 13.12.2017 00:08:11 PKW 63.9 58
8 13.12.2017 00:09:41 PKW 90.7 54
9 13.12.2017 00:11:42 Transporter 122. 56
10 13.12.2017 00:17:31 PKW 354. 61
# ℹ 20,700 more rows
# A tibble: 20,710 × 4
Datum Fahrzeug Abstand Geschwindigkeit
<dttm> <chr> <dbl> <dbl>
1 2017-12-13 00:03:31 PKW 262. 70
2 2017-12-13 00:03:37 PKW 5.18 59
3 2017-12-13 00:03:53 PKW 15.7 79
4 2017-12-13 00:05:42 PKW 111. 58
5 2017-12-13 00:06:51 PKW 69.5 60
6 2017-12-13 00:07:08 Transporter 16.7 57
7 2017-12-13 00:08:11 PKW 63.9 58
8 2017-12-13 00:09:41 PKW 90.7 54
9 2017-12-13 00:11:42 Transporter 122. 56
10 2017-12-13 00:17:31 PKW 354. 61
# ℹ 20,700 more rows
dmy_hms(), ggf. Zeitzone angebenas_hms() die Uhrzeit heraussuchen (library(hms))floor_date(x, unit) rundet ab auf angegebene Einheitd_unistrasse <- read_excel("daten/unistrasse-2017-2.xlsx", sheet = "raw(T)", range = "B2:H20712") |>
select(Datum, Fahrzeug = Fahrzeug, L = `Länge (cm)`, v = Geschwindigkeit) |>
filter(!is.na(Fahrzeug)) |>
mutate(
Datum = dmy_hms(Datum, tz = "Europe/Berlin"),
D15 = floor_date(Datum, "15 minutes"),
Uhrzeit = as_hms(Datum)
)
d_unistrasseif_else()summarize() und group_by()
summarize()mutate(), aber Funktionen werden auf alle Werte angewendetn()mean() und sd() wie gehabt→ In dieser Form nicht besonders nützlich
group_by() und summarize()group_by() nach Kriterium gruppierensummarize() zusammenfassen
summarize() werden auf Gruppen angewendet→ In Kombination sehr flexibel einsetzbar
group_by()tibble [20,707 × 6] (S3: tbl_df/tbl/data.frame)
$ Datum : POSIXct[1:20707], format: "2017-12-13 00:03:31" "2017-12-13 00:03:37" ...
$ Fahrzeug: chr [1:20707] "PKW" "PKW" "PKW" "PKW" ...
$ L : num [1:20707] 421 454 456 479 421 487 387 478 493 427 ...
$ v : num [1:20707] 70 59 79 58 60 57 58 54 56 61 ...
$ D15 : POSIXct[1:20707], format: "2017-12-13 00:00:00" "2017-12-13 00:00:00" ...
$ Uhrzeit : 'hms' num [1:20707] 00:03:31 00:03:37 00:03:53 00:05:42 ...
..- attr(*, "units")= chr "secs"
group_by() - Attribute zur Gruppierunggropd_df [20,707 × 6] (S3: grouped_df/tbl_df/tbl/data.frame)
$ Datum : POSIXct[1:20707], format: "2017-12-13 00:03:31" "2017-12-13 00:03:37" ...
$ Fahrzeug: chr [1:20707] "PKW" "PKW" "PKW" "PKW" ...
$ L : num [1:20707] 421 454 456 479 421 487 387 478 493 427 ...
$ v : num [1:20707] 70 59 79 58 60 57 58 54 56 61 ...
$ D15 : POSIXct[1:20707], format: "2017-12-13 00:00:00" "2017-12-13 00:00:00" ...
$ Uhrzeit : 'hms' num [1:20707] 00:03:31 00:03:37 00:03:53 00:05:42 ...
..- attr(*, "units")= chr "secs"
- attr(*, "groups")= tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
..$ Fahrzeug: chr [1:5] "LKW" "Lastzug" "PKW" "Transporter" ...
..$ .rows : list<int> [1:5]
.. ..$ : int [1:2030] 11 34 62 68 103 115 121 153 155 161 ...
.. ..$ : int [1:813] 95 174 183 188 231 253 279 299 322 332 ...
.. ..$ : int [1:13995] 1 2 3 4 5 7 8 10 12 13 ...
.. ..$ : int [1:3709] 6 9 16 25 26 28 30 32 36 38 ...
.. ..$ : int [1:160] 63 72 154 258 662 691 895 898 991 1209 ...
.. ..@ ptype: int(0)
..- attr(*, ".drop")= logi TRUE
pivot_longer() und pivot_wider()
pivot_longer(): Wenn Namen von Variablen Werte sein solltenpivot_wider(): Wenn Werte Namen von Variablen sein sollten→ Manchmal sind auch beide Varianten notwendig
→ Was man wirklich braucht hängt von der konkreten Situation ab
pivot_longer() 1/21990 bis 2017 umordnennames_to = Name: Variable für alte Variablennamenvalues_to = Name: Variable für Wertepivot_longer() 2/2Energieträger umordnennames_to = Name: Variable für alte Variablennamenvalues_to = Name: Variable für Werted_et_long <-
read_excel("daten/energiedaten-gesamt-xls.xlsx", sheet = "4", range = "A8:AC17") |>
pivot_longer(!Energieträger, names_to = "Jahr", values_to = "Verbrauch") |>
mutate(Jahr = as.numeric(Jahr))
ggplot(data = d_et_long) +
geom_line(mapping = aes(x = Jahr, y = Verbrauch, color = Energieträger))mutate()pivot_wider()names_from = Name: Variable mit neuen Variablennamenvalues_from = Name: Variable mit Werten, die verteilt werden sollenleft_join()
left_join()rename() umbenennen (wie select())left_join(): Alle Zeilen aus linker Tabelle werden übernommeninner_join() etc.) für Spezialfälleleft_join unterdrücken mit #| message: false
bind_rows()/bind_cols()Niederschlagsdaten vom Deutschen Wetterdienst
NA seinna_if(Y, x) alle Werte x in Variable Y durch NA ersetzenacross die Formel ~na_if(., -999) auf mehrere Variablen anwendenseparate(...) verteilt Werte auf Variablenmutate() 1/3mutate() 2/3sum() die Summe in einer Gruppe berechnenmutate() 3/3slice() 1/2slice() 2/2slice_max(v, n = 1) schnellstes Fahrzeug heraussuchensummarize()recode() 1/2recode() 2/3"Alter Wert" ~ "Neuer Wert"recode() 3/3Bausteine Computergestützter Datenanalyse