Daten aufbereiten

Ziel bei der Aufbereitung von Daten

Tidy data

“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)

  • In jeder Spalte steht eine Variable
  • In jeder Zeile steht eine Beobachtung
  • In jeder Zelle steht ein Wert
  • Wir haben alle Variablen, die wir benötigen

→ Nicht immer so eindeutig, wie es hier klingt

Pragmatischer Ansatz

  • Daten sind dann aufgeräumt, wenn das, was man vorhat, einfach umzusetzen ist
  • Zum Beispiel plotten

Der Pipe-Operator |>

Verkettete Funktion \(f(x) = \sin\left(\sqrt{ e^x } \right)\)

Mit geschachtelten Funktionen

sin(sqrt(exp(1.5)))
[1] 0.8545027

→ Zuerst wird \(e^x\) berechnet, dann die Wurzel gezogen und danach der Sinus ermittelt

Mit Pipe-Operator

1.5 |> exp() |> sqrt() |> sin()
[1] 0.8545027

→ Operator |> fügt linke Seite als erstes Argument der Funktion rechts ein

Verkettete Funktion \(f(x) = \sin\left(\sqrt{ e^x } \right)\)

Variablen auswählen oder umbenennen mit select() und rename()

Wann braucht man das?

  • In der Datenquelle stehen mehr Informationen als benötigt
  • Die Namen der Merkmale sind in der Datei nicht gut gewählt

Beispieldatensatz

d_uni <- read_excel("daten/unistrasse-2017-2.xlsx", sheet = "raw(T)", range = "B2:H20712")
d_uni
# A tibble: 20,710 × 7
   Datum      Geschwindigkeit Fahrtrichtung Abstand `Länge (Radar)` `Länge (cm)`
   <chr>                <dbl> <chr>           <dbl>           <dbl>        <dbl>
 1 13.12.201…              70 Ankommend      262.               372          421
 2 13.12.201…              59 Ankommend        5.18             401          454
 3 13.12.201…              79 Ankommend       15.7              403          456
 4 13.12.201…              58 Ankommend      111.               423          479
 5 13.12.201…              60 Ankommend       69.5              372          421
 6 13.12.201…              57 Ankommend       16.7              430          487
 7 13.12.201…              58 Ankommend       63.9              342          387
 8 13.12.201…              54 Ankommend       90.7              422          478
 9 13.12.201…              56 Ankommend      122.               436          493
10 13.12.201…              61 Ankommend      354.               377          427
# ℹ 20,700 more rows
# ℹ 1 more variable: Fahrzeug <chr>

Variablen auswählen mit select()

d_uni |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 20,710 × 4
   Datum               Fahrzeug    Geschwindigkeit `Länge (cm)`
   <chr>               <chr>                 <dbl>        <dbl>
 1 13.12.2017 00:03:31 PKW                      70          421
 2 13.12.2017 00:03:37 PKW                      59          454
 3 13.12.2017 00:03:53 PKW                      79          456
 4 13.12.2017 00:05:42 PKW                      58          479
 5 13.12.2017 00:06:51 PKW                      60          421
 6 13.12.2017 00:07:08 Transporter              57          487
 7 13.12.2017 00:08:11 PKW                      58          387
 8 13.12.2017 00:09:41 PKW                      54          478
 9 13.12.2017 00:11:42 Transporter              56          493
10 13.12.2017 00:17:31 PKW                      61          427
# ℹ 20,700 more rows

  • Alle Merkmale angeben, die ausgewählt werden sollen
  • Anführungszeichen bei Spaltennamen mit Leerzeichen

Variablen entfernen mit select()

d_uni |> select(-Fahrtrichtung, -ends_with("(Radar)"))
# A tibble: 20,710 × 5
   Datum               Geschwindigkeit Abstand `Länge (cm)` Fahrzeug   
   <chr>                         <dbl>   <dbl>        <dbl> <chr>      
 1 13.12.2017 00:03:31              70  262.            421 PKW        
 2 13.12.2017 00:03:37              59    5.18          454 PKW        
 3 13.12.2017 00:03:53              79   15.7           456 PKW        
 4 13.12.2017 00:05:42              58  111.            479 PKW        
 5 13.12.2017 00:06:51              60   69.5           421 PKW        
 6 13.12.2017 00:07:08              57   16.7           487 Transporter
 7 13.12.2017 00:08:11              58   63.9           387 PKW        
 8 13.12.2017 00:09:41              54   90.7           478 PKW        
 9 13.12.2017 00:11:42              56  122.            493 Transporter
10 13.12.2017 00:17:31              61  354.            427 PKW        
# ℹ 20,700 more rows

  • Hier: Merkmale angegeben, die nicht ausgewählt werden sollen
  • Anführungszeichen bei Spaltennamen mit Leerzeichen
  • Wird einer Variablen ein - vorangestellt, dann wird die Spalte entfernt
  • Alle anderen Variablen werden beibehalten

Variablen umbenennen mit select()

d_uni |> select(Datum, FZ = Fahrzeug, v = Geschwindigkeit, L = "Länge (cm)")
# A tibble: 20,710 × 4
   Datum               FZ              v     L
   <chr>               <chr>       <dbl> <dbl>
 1 13.12.2017 00:03:31 PKW            70   421
 2 13.12.2017 00:03:37 PKW            59   454
 3 13.12.2017 00:03:53 PKW            79   456
 4 13.12.2017 00:05:42 PKW            58   479
 5 13.12.2017 00:06:51 PKW            60   421
 6 13.12.2017 00:07:08 Transporter    57   487
 7 13.12.2017 00:08:11 PKW            58   387
 8 13.12.2017 00:09:41 PKW            54   478
 9 13.12.2017 00:11:42 Transporter    56   493
10 13.12.2017 00:17:31 PKW            61   427
# ℹ 20,700 more rows

  • Umbenennen mit neuer_name = alter_name

Beispieldatensatz 2

d <- tibble(A_X = 1:2, B_X = 1:2, X_A = 1:2, X_B = 1:2, Datum = 1:2)
d |> kable()
A_X B_X X_A X_B Datum
1 1 1 1 1
2 2 2 2 2

Variablen nach Muster auswählen

d |> select(starts_with("X")) |> kable()
X_A X_B
1 1
2 2
d |> select(ends_with("X")) |> kable()
A_X B_X
1 1
2 2
d |> select(-starts_with("X")) |> kable()
A_X B_X Datum
1 1 1
2 2 2
  • Mit starts_with() und ends_with() ein Muster für Namen festlegen
  • Funktioniert auch wieder mit -

Variablen umbenennen mit rename()

d_uni |> rename(v = Geschwindigkeit) 
# A tibble: 20,710 × 7
   Datum           v Fahrtrichtung Abstand `Länge (Radar)` `Länge (cm)` Fahrzeug
   <chr>       <dbl> <chr>           <dbl>           <dbl>        <dbl> <chr>   
 1 13.12.2017…    70 Ankommend      262.               372          421 PKW     
 2 13.12.2017…    59 Ankommend        5.18             401          454 PKW     
 3 13.12.2017…    79 Ankommend       15.7              403          456 PKW     
 4 13.12.2017…    58 Ankommend      111.               423          479 PKW     
 5 13.12.2017…    60 Ankommend       69.5              372          421 PKW     
 6 13.12.2017…    57 Ankommend       16.7              430          487 Transpo…
 7 13.12.2017…    58 Ankommend       63.9              342          387 PKW     
 8 13.12.2017…    54 Ankommend       90.7              422          478 PKW     
 9 13.12.2017…    56 Ankommend      122.               436          493 Transpo…
10 13.12.2017…    61 Ankommend      354.               377          427 PKW     
# ℹ 20,700 more rows

  • Variable umbenennen mit neuer_name = alter_name
  • Alle anderen Variablen werden beibehalten

Beobachtungen auswählen mit filter() und slice()

Wann braucht man das?

  • Wenn einzelne Werte aussortiert werden sollen
  • Wenn man sich nur für bestimmte Beobachtungen interessiert

Wieder Beispieldatensatz

d_uni |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 20,710 × 4
   Datum               Fahrzeug    Geschwindigkeit `Länge (cm)`
   <chr>               <chr>                 <dbl>        <dbl>
 1 13.12.2017 00:03:31 PKW                      70          421
 2 13.12.2017 00:03:37 PKW                      59          454
 3 13.12.2017 00:03:53 PKW                      79          456
 4 13.12.2017 00:05:42 PKW                      58          479
 5 13.12.2017 00:06:51 PKW                      60          421
 6 13.12.2017 00:07:08 Transporter              57          487
 7 13.12.2017 00:08:11 PKW                      58          387
 8 13.12.2017 00:09:41 PKW                      54          478
 9 13.12.2017 00:11:42 Transporter              56          493
10 13.12.2017 00:17:31 PKW                      61          427
# ℹ 20,700 more rows

Filter: Nur LKW

d_uni |> filter(Fahrzeug == "LKW") |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 2,030 × 4
   Datum               Fahrzeug Geschwindigkeit `Länge (cm)`
   <chr>               <chr>              <dbl>        <dbl>
 1 13.12.2017 00:18:27 LKW                   61          591
 2 13.12.2017 01:21:34 LKW                   54          604
 3 13.12.2017 03:11:06 LKW                   52          834
 4 13.12.2017 03:39:18 LKW                   61          803
 5 13.12.2017 05:02:26 LKW                   54          607
 6 13.12.2017 05:14:03 LKW                   51          867
 7 13.12.2017 05:18:08 LKW                   53          590
 8 13.12.2017 05:38:30 LKW                   64          604
 9 13.12.2017 05:38:33 LKW                   52          766
10 13.12.2017 05:40:50 LKW                   61          600
# ℹ 2,020 more rows

  • Bedingung als logischer Ausdruck mit Name der Variablen

Filter: Nur LKW, die schneller als 60km/h gefahren sind

d_uni |> filter(Fahrzeug == "LKW" & Geschwindigkeit > 60) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 194 × 4
   Datum               Fahrzeug Geschwindigkeit `Länge (cm)`
   <chr>               <chr>              <dbl>        <dbl>
 1 13.12.2017 00:18:27 LKW                   61          591
 2 13.12.2017 03:39:18 LKW                   61          803
 3 13.12.2017 05:38:30 LKW                   64          604
 4 13.12.2017 05:40:50 LKW                   61          600
 5 13.12.2017 05:43:56 LKW                   63          679
 6 13.12.2017 05:58:06 LKW                   61          604
 7 13.12.2017 06:01:32 LKW                   63          716
 8 13.12.2017 06:06:30 LKW                   70          879
 9 13.12.2017 06:14:08 LKW                   64          884
10 13.12.2017 06:24:38 LKW                   65          852
# ℹ 184 more rows

  • Bedingung als logischer Ausdruck mit Name der Variablen
  • Logisches und: &

Filter: Nur LKW oder Fahrzeuge, die schneller als 80km/h gefahren sind

d_uni |> filter(Fahrzeug == "LKW" | Geschwindigkeit > 80) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 2,074 × 4
   Datum               Fahrzeug    Geschwindigkeit `Länge (cm)`
   <chr>               <chr>                 <dbl>        <dbl>
 1 13.12.2017 00:18:27 LKW                      61          591
 2 13.12.2017 01:21:34 LKW                      54          604
 3 13.12.2017 01:49:17 PKW                      83          470
 4 13.12.2017 01:59:28 Transporter              90          505
 5 13.12.2017 03:07:27 Transporter              91          510
 6 13.12.2017 03:11:06 LKW                      52          834
 7 13.12.2017 03:39:18 LKW                      61          803
 8 13.12.2017 05:02:26 LKW                      54          607
 9 13.12.2017 05:14:03 LKW                      51          867
10 13.12.2017 05:18:08 LKW                      53          590
# ℹ 2,064 more rows

  • Bedingung als logischer Ausdruck mit Name der Variablen
  • Logisches oder: |

Filter: Alle Fahrzeuge, deren Fahrzeugtyp nicht erkannt wurde

d_uni |> filter(is.na(Fahrzeug)) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 3 × 4
  Datum               Fahrzeug Geschwindigkeit `Länge (cm)`
  <chr>               <chr>              <dbl>        <dbl>
1 13.12.2017 08:15:37 <NA>                  37         2516
2 13.12.2017 15:26:21 <NA>                  50         2513
3 14.12.2017 15:53:05 <NA>                  55         2012

Filter: Zeilen mit NA entfernen

d_uni |> filter(!is.na(Fahrzeug)) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 20,707 × 4
   Datum               Fahrzeug    Geschwindigkeit `Länge (cm)`
   <chr>               <chr>                 <dbl>        <dbl>
 1 13.12.2017 00:03:31 PKW                      70          421
 2 13.12.2017 00:03:37 PKW                      59          454
 3 13.12.2017 00:03:53 PKW                      79          456
 4 13.12.2017 00:05:42 PKW                      58          479
 5 13.12.2017 00:06:51 PKW                      60          421
 6 13.12.2017 00:07:08 Transporter              57          487
 7 13.12.2017 00:08:11 PKW                      58          387
 8 13.12.2017 00:09:41 PKW                      54          478
 9 13.12.2017 00:11:42 Transporter              56          493
10 13.12.2017 00:17:31 PKW                      61          427
# ℹ 20,697 more rows

Filter: Kriterium in Vektor

d_uni |> filter(Fahrzeug %in% c("Zweirad", "LKW")) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 2,190 × 4
   Datum               Fahrzeug Geschwindigkeit `Länge (cm)`
   <chr>               <chr>              <dbl>        <dbl>
 1 13.12.2017 00:18:27 LKW                   61          591
 2 13.12.2017 01:21:34 LKW                   54          604
 3 13.12.2017 03:11:06 LKW                   52          834
 4 13.12.2017 03:18:53 Zweirad               27          179
 5 13.12.2017 03:39:18 LKW                   61          803
 6 13.12.2017 03:58:26 Zweirad               20          162
 7 13.12.2017 05:02:26 LKW                   54          607
 8 13.12.2017 05:14:03 LKW                   51          867
 9 13.12.2017 05:18:08 LKW                   53          590
10 13.12.2017 05:38:30 LKW                   64          604
# ℹ 2,180 more rows

  • Werte für Merkmal aus Vektor

Auswahl von Beobachtungen nach Zeilennummer mit slice()

d_uni |> slice(c(10, 30, 700)) |> select(Datum, Fahrzeug, Geschwindigkeit, "Länge (cm)")
# A tibble: 3 × 4
  Datum               Fahrzeug    Geschwindigkeit `Länge (cm)`
  <chr>               <chr>                 <dbl>        <dbl>
1 13.12.2017 00:17:31 PKW                      61          427
2 13.12.2017 01:07:31 Transporter              65          494
3 13.12.2017 06:58:03 PKW                      50          461

  • Beobachtungen nach Position auswählen

Auswahl von Beobachtungen am Anfang oder Ende mit slice()

d_uni |> slice_head(n = 10) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 10 × 3
   Datum               Fahrzeug        v
   <chr>               <chr>       <dbl>
 1 13.12.2017 00:03:31 PKW            70
 2 13.12.2017 00:03:37 PKW            59
 3 13.12.2017 00:03:53 PKW            79
 4 13.12.2017 00:05:42 PKW            58
 5 13.12.2017 00:06:51 PKW            60
 6 13.12.2017 00:07:08 Transporter    57
 7 13.12.2017 00:08:11 PKW            58
 8 13.12.2017 00:09:41 PKW            54
 9 13.12.2017 00:11:42 Transporter    56
10 13.12.2017 00:17:31 PKW            61
d_uni |> slice_tail(n = 10) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 10 × 3
   Datum               Fahrzeug     v
   <chr>               <chr>    <dbl>
 1 14.12.2017 23:52:40 PKW         57
 2 14.12.2017 23:52:46 PKW         52
 3 14.12.2017 23:53:36 PKW         72
 4 14.12.2017 23:54:58 PKW         62
 5 14.12.2017 23:54:59 PKW         64
 6 14.12.2017 23:57:15 PKW         60
 7 14.12.2017 23:58:19 PKW         81
 8 14.12.2017 23:58:27 PKW         65
 9 14.12.2017 23:58:28 PKW         56
10 14.12.2017 23:58:29 PKW         72

  • Die ersten und letzten n (Anzahl) Beobachtungen auswählen
  • Head wie Kopf und tail wie Schwanz oder Ende

Auswahl von kleinsten oder größten Beobachtungen mit slice()

d_uni |> slice_min(Geschwindigkeit, n = 8) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 9 × 3
  Datum               Fahrzeug     v
  <chr>               <chr>    <dbl>
1 13.12.2017 17:12:52 Zweirad      7
2 13.12.2017 08:46:38 PKW          9
3 13.12.2017 16:09:52 Zweirad      9
4 13.12.2017 17:12:41 PKW         10
5 14.12.2017 13:49:04 PKW         10
6 13.12.2017 09:58:47 Lastzug     12
7 13.12.2017 17:12:39 PKW         12
8 14.12.2017 11:36:16 LKW         13
9 14.12.2017 16:44:06 PKW         13
d_uni |> slice_max(Geschwindigkeit, n = 8) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 9 × 3
  Datum               Fahrzeug        v
  <chr>               <chr>       <dbl>
1 14.12.2017 20:49:15 PKW           108
2 13.12.2017 19:21:09 PKW           105
3 14.12.2017 02:58:38 PKW           100
4 14.12.2017 07:49:00 PKW            99
5 14.12.2017 21:15:10 Transporter    96
6 14.12.2017 03:00:39 PKW            95
7 13.12.2017 05:48:41 PKW            92
8 13.12.2017 03:07:27 Transporter    91
9 13.12.2017 21:02:52 PKW            91

  • Die kleinsten und größten n (Anzahl) Beobachtungen für ein Merkmal auswählen
  • min wie Minimum und max wie Maximum

Beobachtungen sortieren mit arrange()

Wann braucht man das?

  • Wenn man sich für die größten oder kleinsten Werte interessiert
  • Um die Reihenfolge beim Plotten zu ändern, so dass bestimmte Objekte über anderen liegen

Übersicht der langsamsten Fahrzeuge

d_uni |> arrange(Geschwindigkeit) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 20,710 × 3
   Datum               Fahrzeug     v
   <chr>               <chr>    <dbl>
 1 13.12.2017 17:12:52 Zweirad      7
 2 13.12.2017 08:46:38 PKW          9
 3 13.12.2017 16:09:52 Zweirad      9
 4 13.12.2017 17:12:41 PKW         10
 5 14.12.2017 13:49:04 PKW         10
 6 13.12.2017 09:58:47 Lastzug     12
 7 13.12.2017 17:12:39 PKW         12
 8 14.12.2017 11:36:16 LKW         13
 9 14.12.2017 16:44:06 PKW         13
10 13.12.2017 13:20:31 LKW         14
# ℹ 20,700 more rows

  • Sortiert aufsteigend nach dem angegebenen Merkmal
  • Schnellste Fahrer mit desc(merkmal) (sortiert absteigend)

Nach mehreren Kriterien sortieren (1/2)

d_uni |> arrange(Fahrzeug, Geschwindigkeit) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 20,710 × 3
   Datum               Fahrzeug     v
   <chr>               <chr>    <dbl>
 1 14.12.2017 11:36:16 LKW         13
 2 13.12.2017 13:20:31 LKW         14
 3 14.12.2017 08:47:25 LKW         18
 4 14.12.2017 07:56:33 LKW         19
 5 13.12.2017 11:29:06 LKW         20
 6 14.12.2017 15:04:33 LKW         20
 7 14.12.2017 08:04:03 LKW         21
 8 14.12.2017 17:46:07 LKW         22
 9 13.12.2017 10:00:53 LKW         23
10 13.12.2017 13:47:30 LKW         23
# ℹ 20,700 more rows

  • Zuerst nach Fahrzeugen sortieren
  • Innerhalb einer Fahrzeuggruppe nach Geschwindigkeit angeordnet

Nach mehreren Kriterien sortieren (2/2)

d_uni |> arrange(Geschwindigkeit, Fahrzeug) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 20,710 × 3
   Datum               Fahrzeug     v
   <chr>               <chr>    <dbl>
 1 13.12.2017 17:12:52 Zweirad      7
 2 13.12.2017 08:46:38 PKW          9
 3 13.12.2017 16:09:52 Zweirad      9
 4 13.12.2017 17:12:41 PKW         10
 5 14.12.2017 13:49:04 PKW         10
 6 13.12.2017 09:58:47 Lastzug     12
 7 13.12.2017 17:12:39 PKW         12
 8 14.12.2017 11:36:16 LKW         13
 9 14.12.2017 16:44:06 PKW         13
10 13.12.2017 13:20:31 LKW         14
# ℹ 20,700 more rows

  • Zuerst nach der Geschwindigkeit sortieren
  • Innerhalb einer Geschwindigkeiten nach Fahrzeugen angeordnet

Variablen hinzufügen oder verändern mit mutate()

Wann braucht man das?

  • Wenn aus den vorliegenden Werten neue Werte berechnet werden sollen
  • Wenn bestehende Werte verändert werden sollen (typischerweise: Datum)

Geschwindigkeit runden

d_uni |> mutate(V10 = signif(Geschwindigkeit, digits = 1))|> select(Datum, Fahrzeug, v = Geschwindigkeit, V10)
# A tibble: 20,710 × 4
   Datum               Fahrzeug        v   V10
   <chr>               <chr>       <dbl> <dbl>
 1 13.12.2017 00:03:31 PKW            70    70
 2 13.12.2017 00:03:37 PKW            59    60
 3 13.12.2017 00:03:53 PKW            79    80
 4 13.12.2017 00:05:42 PKW            58    60
 5 13.12.2017 00:06:51 PKW            60    60
 6 13.12.2017 00:07:08 Transporter    57    60
 7 13.12.2017 00:08:11 PKW            58    60
 8 13.12.2017 00:09:41 PKW            54    50
 9 13.12.2017 00:11:42 Transporter    56    60
10 13.12.2017 00:17:31 PKW            61    60
# ℹ 20,700 more rows

  • neue_variable = Ausdruck(alte_variablen)
  • Mehrere Variablen sind möglich
  • Mit signif() auf eine signifikante Stellte gerundet

Datum konvertieren

d_uni |> mutate(Datum = dmy_hms(Datum, tz = "Europe/Berlin")) |> select(Datum, Fahrzeug, v = Geschwindigkeit)
# A tibble: 20,710 × 3
   Datum               Fahrzeug        v
   <dttm>              <chr>       <dbl>
 1 2017-12-13 00:03:31 PKW            70
 2 2017-12-13 00:03:37 PKW            59
 3 2017-12-13 00:03:53 PKW            79
 4 2017-12-13 00:05:42 PKW            58
 5 2017-12-13 00:06:51 PKW            60
 6 2017-12-13 00:07:08 Transporter    57
 7 2017-12-13 00:08:11 PKW            58
 8 2017-12-13 00:09:41 PKW            54
 9 2017-12-13 00:11:42 Transporter    56
10 2017-12-13 00:17:31 PKW            61
# ℹ 20,700 more rows

  • Nach dem Einlesen ist das Merkmal Datum eine Zeichenkette
  • Alter Wert von Datum wird überschrieben
  • Mit dmy_hms() in date-time konvertiert, Zeitzone angeben
  • Jetzt können wir mit dem Datum arbeiten

Datum und Uhrzeit konvertieren

d_uni |> 
  mutate(
    Datum = dmy_hms(Datum, tz = "Europe/Berlin"),
    Uhrzeit = as_hms(Datum)
  ) |> select(Datum, Uhrzeit, Fahrzeug, v = Geschwindigkeit)
# A tibble: 20,710 × 4
   Datum               Uhrzeit Fahrzeug        v
   <dttm>              <time>  <chr>       <dbl>
 1 2017-12-13 00:03:31 03'31"  PKW            70
 2 2017-12-13 00:03:37 03'37"  PKW            59
 3 2017-12-13 00:03:53 03'53"  PKW            79
 4 2017-12-13 00:05:42 05'42"  PKW            58
 5 2017-12-13 00:06:51 06'51"  PKW            60
 6 2017-12-13 00:07:08 07'08"  Transporter    57
 7 2017-12-13 00:08:11 08'11"  PKW            58
 8 2017-12-13 00:09:41 09'41"  PKW            54
 9 2017-12-13 00:11:42 11'42"  Transporter    56
10 2017-12-13 00:17:31 17'31"  PKW            61
# ℹ 20,700 more rows

  • Mit as_hms() die Uhrzeit heraussuchen (library(hms))

Mit der Uhrzeit rechnen

d_uni |> 
  mutate(
    Datum = dmy_hms(Datum, tz = "Europe/Berlin"),
    D15 = floor_date(Datum, "15 minutes"),
    Uhrzeit = as_hms(Datum)
  ) |> 
select(Datum, Uhrzeit, D15)
# A tibble: 20,710 × 3
   Datum               Uhrzeit D15                
   <dttm>              <time>  <dttm>             
 1 2017-12-13 00:03:31 03'31"  2017-12-13 00:00:00
 2 2017-12-13 00:03:37 03'37"  2017-12-13 00:00:00
 3 2017-12-13 00:03:53 03'53"  2017-12-13 00:00:00
 4 2017-12-13 00:05:42 05'42"  2017-12-13 00:00:00
 5 2017-12-13 00:06:51 06'51"  2017-12-13 00:00:00
 6 2017-12-13 00:07:08 07'08"  2017-12-13 00:00:00
 7 2017-12-13 00:08:11 08'11"  2017-12-13 00:00:00
 8 2017-12-13 00:09:41 09'41"  2017-12-13 00:00:00
 9 2017-12-13 00:11:42 11'42"  2017-12-13 00:00:00
10 2017-12-13 00:17:31 17'31"  2017-12-13 00:15:00
# ℹ 20,700 more rows

  • floor_date(x, unit) rundet die Datums- oder Zeitangabe auf die angegebene Einheit (unit) ab (floor) (library(lubridate))

Alles in einem Rutsch

d_unistrasse <- read_excel("daten/unistrasse-2017-2.xlsx",sheet="raw(T)",range="B2:H20712") |>
  select(Datum, Fz = Fahrzeug, L = `Länge (cm)`, v = Geschwindigkeit) |>
  filter(!is.na(Fz)) |>
  mutate(
    Datum = dmy_hms(Datum, tz = "Europe/Berlin"),
    D15 = floor_date(Datum, "15 minutes"),
    Uhrzeit = as_hms(Datum)
  )
d_unistrasse |> select(Datum, Uhrzeit, D15, Fz, L, v)
# A tibble: 20,707 × 6
   Datum               Uhrzeit D15                 Fz              L     v
   <dttm>              <time>  <dttm>              <chr>       <dbl> <dbl>
 1 2017-12-13 00:03:31 03'31"  2017-12-13 00:00:00 PKW           421    70
 2 2017-12-13 00:03:37 03'37"  2017-12-13 00:00:00 PKW           454    59
 3 2017-12-13 00:03:53 03'53"  2017-12-13 00:00:00 PKW           456    79
 4 2017-12-13 00:05:42 05'42"  2017-12-13 00:00:00 PKW           479    58
 5 2017-12-13 00:06:51 06'51"  2017-12-13 00:00:00 PKW           421    60
 6 2017-12-13 00:07:08 07'08"  2017-12-13 00:00:00 Transporter   487    57
 7 2017-12-13 00:08:11 08'11"  2017-12-13 00:00:00 PKW           387    58
 8 2017-12-13 00:09:41 09'41"  2017-12-13 00:00:00 PKW           478    54
 9 2017-12-13 00:11:42 11'42"  2017-12-13 00:00:00 Transporter   493    56
10 2017-12-13 00:17:31 17'31"  2017-12-13 00:15:00 PKW           427    61
# ℹ 20,697 more rows

  • Mehrere Operationen nacheinander ausgeführt
  • Lesbarkeit: Jede Operation in eine eigene Zeile
  • Lange Operationen nochmal aufteilen
  • select gibt auch die Reihenfolge der Spalten an

Damit: Plot Uhrzeit und Geschwindigkeit

ggplot(data = d_unistrasse) +
  geom_hex(mapping = aes(x = Uhrzeit, y = v)) 

  • Histogramm der Geschwindigkeitsverteilung über Uhrzeit

Bedingte Anweisung mit if_else()

d_uni |> mutate(Raser = if_else(Geschwindigkeit >= 70, "Ja", "Nein")) |> select(Datum, Fahrzeug, v = Geschwindigkeit, Raser)
# A tibble: 20,710 × 4
   Datum               Fahrzeug        v Raser
   <chr>               <chr>       <dbl> <chr>
 1 13.12.2017 00:03:31 PKW            70 Ja   
 2 13.12.2017 00:03:37 PKW            59 Nein 
 3 13.12.2017 00:03:53 PKW            79 Ja   
 4 13.12.2017 00:05:42 PKW            58 Nein 
 5 13.12.2017 00:06:51 PKW            60 Nein 
 6 13.12.2017 00:07:08 Transporter    57 Nein 
 7 13.12.2017 00:08:11 PKW            58 Nein 
 8 13.12.2017 00:09:41 PKW            54 Nein 
 9 13.12.2017 00:11:42 Transporter    56 Nein 
10 13.12.2017 00:17:31 PKW            61 Nein 
# ℹ 20,700 more rows

  • Erster Parameter ist Bedingung
  • Neue Variable Raser erhält Wert von zweitem Parameter, falls Bedingung erfüllt
  • Falls Bedingung nicht erfüllt wird dritter Parameter verwendet

Zusammenfassen mit summarize() und group_by()

Wann braucht man das?

  • Wenn man wissen will, wie oft eine bestimmte Beobachtung aufgetreten ist
  • Wenn Durchnittswerte oder ähnliches benötigt werden

Nur summarize()

d_unistrasse |> summarise(n = n(), VMit = mean(v), VS = sd(v)) 
# A tibble: 1 × 3
      n  VMit    VS
  <int> <dbl> <dbl>
1 20707  52.5  7.82
  • Neue Merkmale wie bei mutate()
  • Unterschied: Funktionen werden auf alle Werte angewendet
  • Mit n() werden Zeilen gezählt
  • Funktionen mean() und sd() wie gehabt

→ In dieser Form nicht besonders nützlich (und das können wir auch anders)

Kombi group_by() und summarize()

d_unistrasse |> 
  group_by(Fz) |> 
  summarise(n = n(), VMit = mean(v), VS = sd(v)) 
# A tibble: 5 × 4
  Fz              n  VMit    VS
  <chr>       <int> <dbl> <dbl>
1 LKW          2030  51.8  7.39
2 Lastzug       813  51.7  7.15
3 PKW         13995  52.7  7.63
4 Transporter  3709  53.2  7.65
5 Zweirad       160  33.4 11.2 
  • Daten zunächst mit group_by() nach einem (oder mehreren Kriterien) gruppieren
  • Danach wird mit summarize() zusammenfassen
    • Gruppierungsmerkmal(e) bleiben erhalten
    • Funktionen in summarize() werden auf jede Gruppe einzeln angewendet

→ In dieser Kombination sehr flexibel einsetzbar

Beispiel: 15-Minuten Geschwindigkeit

d_unistrasse_15m <- d_unistrasse |>
  group_by(D15) |>
  summarise(VMit = mean(v))
ggplot(data = d_unistrasse_15m, mapping = aes(x = D15, y = VMit)) + geom_line() + geom_point() 

Effekt von group_by() (notwendig?)

d_unistrasse |> str()
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" ...
 $ Fz     : 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"

Effekt von group_by() - Attribute zur Gruppierung (notwendig?)

d_unistrasse |> group_by(Fz) |> str()
gropd_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" ...
 $ Fz     : 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)
  ..$ Fz   : 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

Zusammenfassen und verteilen mit pivot_longer() und pivot_wider()

Wann braucht man das?

  • Zusammenfassen: Wenn Namen von Spalten Werte sein sollten
  • Verteilen: Wenn Werte Namen von Spalten sein sollten

→ Manchmal sind auch beide Darstellungen notwendig

Breite und lange Tabellen

  • Man spricht von breiten und langen Tabellenformaten
  • Englisch: Wide and long data
  • Aufgeräumte Daten (tidy data) sind meistens lang

→ Immer auch abhängig von der konkreten Situation

Beispiel: Energieträger (Quelle: BMWi)

  • Unpraktisch zum Plotten und Weiterverarbeiten
  • Wir würden gerne
    • Die Spalte Energieträger beibehalten
    • Aus den Spaltenüberschriften 1990 bis 2017 das Merkmal Jahr machen
    • Die Werte in einem Merkmal Verbrauch speichern

Einlesen der Daten (Quelle: BMWi)

d_et <- read_excel("daten/energiedaten-gesamt-xls.xlsx", sheet="4", range="A8:AC17")
d_et
# A tibble: 9 × 29
  Energieträger        `1990`  `1991` `1992` `1993` `1994` `1995` `1996`  `1997`
  <chr>                 <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
1 Mineralöl            5.22e3 5525.   5612.  5.73e3 5.68e3 5689.  5808.  5753.  
2 Steinkohle           2.31e3 2330.   2196.  2.14e3 2.14e3 2060.  2090.  2065.  
3 Braunkohle           3.20e3 2507.   2176.  1.98e3 1.86e3 1734.  1688.  1595.  
4 Erdgas, Erdölgas     2.29e3 2409.   2382.  2.52e3 2.57e3 2799.  3132.  2992.  
5 Kernenergie          1.67e3 1609.   1733.  1.67e3 1.65e3 1682.  1764.  1859.  
6 Wasser- und Windkra… 5.79e1   52.7    62.3 6.36e1 6.66e1   83.2   73.3   77.5 
7 andere Erneuerbare … 1.39e2  145.    145.  1.64e2 1.86e2  191.   197.   267.  
8 Außenhandelssaldo S… 2.84e0   -2.07  -19.2 3.13e0 8.41e0   17.4  -19.0   -8.46
9 Sonstige             2.18e1   35.1    32.5 3.01e1 2.53e1   13.4   13.3   13.6 
# ℹ 20 more variables: `1998` <dbl>, `1999` <dbl>, `2000` <dbl>, `2001` <dbl>,
#   `2002` <dbl>, `2003` <dbl>, `2004` <dbl>, `2005` <dbl>, `2006` <dbl>,
#   `2007` <dbl>, `2008` <dbl>, `2009` <dbl>, `2010` <dbl>, `2011` <dbl>,
#   `2012` <dbl>, `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>,
#   `2017` <dbl>

Transformation mit pivot_longer()

d_et |> pivot_longer(!Energieträger, names_to = "Jahr", values_to = "Verbrauch")
# A tibble: 252 × 3
   Energieträger Jahr  Verbrauch
   <chr>         <chr>     <dbl>
 1 Mineralöl     1990      5217.
 2 Mineralöl     1991      5525.
 3 Mineralöl     1992      5612.
 4 Mineralöl     1993      5731.
 5 Mineralöl     1994      5681.
 6 Mineralöl     1995      5689.
 7 Mineralöl     1996      5808.
 8 Mineralöl     1997      5753.
 9 Mineralöl     1998      5775.
10 Mineralöl     1999      5599.
# ℹ 242 more rows
  • Spalte(n), die beibehalten werden sollen, mit !Name angeben
  • names_to = Name: Spalte für alte Spaltenüberschriften
  • values_to = Name: Spalte für Werte

Beispiel vollständig

d_energietraeger <- 
  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_energietraeger) +
  geom_line(mapping = aes(x = Jahr, y = Verbrauch, color = Energieträger))

  • In einem Rutsch einlesen und weiterverarbeiten
  • Jahr in Zahl konvertieren mit mutate()

Werte verteilen mit pivot_wider()

d_energietraeger |> pivot_wider(names_from = Energieträger, values_from = Verbrauch)
# A tibble: 28 × 10
    Jahr Mineralöl Steinkohle Braunkohle `Erdgas, Erdölgas` Kernenergie
   <dbl>     <dbl>      <dbl>      <dbl>              <dbl>       <dbl>
 1  1990     5217.      2306.      3201.              2293.       1668.
 2  1991     5525.      2330.      2507.              2409.       1609.
 3  1992     5612.      2196.      2176.              2382.       1733.
 4  1993     5731.      2139.      1983.              2520.       1675.
 5  1994     5681.      2140.      1861.              2567.       1650.
 6  1995     5689.      2060.      1734.              2799.       1682.
 7  1996     5808.      2090.      1688.              3132.       1764.
 8  1997     5753.      2065.      1595.              2992.       1859.
 9  1998     5775.      2059.      1514.              3019.       1764.
10  1999     5599.      1967.      1473.              3010.       1855.
# ℹ 18 more rows
# ℹ 4 more variables: `Wasser- und Windkraft 1) 3)` <dbl>,
#   `andere Erneuerbare 2)` <dbl>, `Außenhandelssaldo Strom` <dbl>,
#   Sonstige <dbl>
  • names_from = Name: Spalte mit neuen Spaltenüberschriften
  • values_from = Name: Spalte mit Werten, die verteilt werden sollen
  • Damit transponierte der ursprünglichen Tabelle

Dataframes verknüpfen mit left_join()

Wann braucht man das?

  • Wenn in einer Spalte Kürzel stehen, die in einem anderen Dataframe hinterlegt sind
  • Wenn zwei Dataframes aneinandergehängt werden sollen

Dataframes über einen Schlüssel miteinander verknüpfen

  • Tabellen sind über gemeinsames Merkmal (gelb) miteinander verknüpft
  • Neue Tabelle mit Werten zu Verknüpfungsmerkmal
  • Schlüssel in zweiter Tabelle nicht vorhanden: NAs einsetzen
  • Schlüssel müssen in zweiter Tabelle eindeutig sein!

Dataframe Mitarbeitende

d_mitarbeiter <- read_excel("daten/mitarbeiter-beispiel.xlsx", range = "B2:E7")
kable(d_mitarbeiter)
m_id name a_id seit
1 Anton Fischer 5 2006
2 Anja Fischer 3 1998
3 Adelheid Fischer 42 2018
4 Franz Alt 2 2013
6 Gerd Best 1 2005

Dataframe Abteilungen

d_abteilungen <- read_excel("daten/mitarbeiter-beispiel.xlsx", range = "G2:I7")
kable(d_abteilungen)
a_id bezeichnung standort
1 Vertrieb Bochum
2 IT Bielefeld
3 Personal Berlin
4 Forschung Bonn
5 Produktion Baden-Baden

Verknüpfung der beiden Dataframes mit left_join()

d_mitarbeiter_1 <- d_mitarbeiter |> left_join(d_abteilungen)
kable(d_mitarbeiter_1)
m_id name a_id seit bezeichnung standort
1 Anton Fischer 5 2006 Produktion Baden-Baden
2 Anja Fischer 3 1998 Personal Berlin
3 Adelheid Fischer 42 2018 NA NA
4 Franz Alt 2 2013 IT Bielefeld
6 Gerd Best 1 2005 Vertrieb Bochum

  • Dataframes müssen ein Merkmal gemeinsam haben
  • Gegebenenfalls Merkmal mit rename() umbenennen (wie select())
  • Left in left_join(): Alle Zeilen aus linker Tabelle werden übernommen
  • Andere Varianten (inner_join() etc.) für Spezialfälle
  • Ausgabe von left_join unterdrücken mit #| message: false

Anwendung: Kodierte Werte 1/4

  • In den Rohdaten sind Codes eingetragen und nicht Werte
  • Warum macht man das?
    • Arbeit sparen wenn Werte von Hand eingetragen werden
    • Speicherplatz sparen bei umfangreichen Tabellen
  • Für statistische Auswertung: Dataframe mit Werten

Anwendung: Kodierte Werte 2/4

d_ud <- read_excel("daten/beispiel-kodierung.xlsx", range="B2:D5")
kable(d_ud)
datum ort_code unfalltyp_code
1965-10-01 1 3
1986-09-02 2 2
1999-03-03 3 1

Anwendung: Kodierte Werte 3/4

d_ud_k1 <- read_excel("daten/beispiel-kodierung.xlsx", range="F2:G5")
kable(d_ud_k1)
ort_code ort
1 Bonn
2 Aachen
3 Berlin
d_ud_k2 <- read_excel("daten/beispiel-kodierung.xlsx", range="I2:J5")
kable(d_ud_k2)
unfalltyp_code unfalltyp
1 Fahrunfall (F)
2 Abbiegeunfall (AB)
3 Einbiegen/Kreuzen-Unfall (EK)

Anwendung: Kodierte Werte 4/4

d_ud |>
  left_join(d_ud_k1) |>
  left_join(d_ud_k2) |>
  select(-ends_with("_code")) |>
  kable()
datum ort unfalltyp
1965-10-01 Bonn Einbiegen/Kreuzen-Unfall (EK)
1986-09-02 Aachen Abbiegeunfall (AB)
1999-03-03 Berlin Fahrunfall (F)
  • Unfalldaten mit beiden Kodierungstabellen verknüpfen
  • Spalten mit den Codes löschen

Dataframes aneinanderhängen bind_rows()/bind_cols()

Dataframes aneinander hängen

d1 <- tibble(X = c("A", "B"), Y = c(1, 2))
d2 <- tibble(X = "C", Y = 3)
d3 <- tibble(Z = c(1.7, 2.9))
kable(d1)
X Y
A 1
B 2
kable(d2)
X Y
C 3
kable(d3)
Z
1.7
2.9
d1 |> bind_cols(d3) |> kable()
X Y Z
A 1 1.7
B 2 2.9
d1 |> bind_rows(d2) |> kable()
X Y
A 1
B 2
C 3
  • Mit bind_cols() Dataframes nebeneinander (column-bind)
    • Anzahl der Beobachtungen müssen gleich sein!
  • Mit bind_rows() Dataframes hintereinander (row-bind)
    • Merkmale müssen gleich sein!

Verschiedenes

Werte durch NAs ersetzen 1/4

Niederschlagsdaten vom Deutschen Wetterdienst

  • Wert -999 kennzeichnet eine fehlende Beobachtung
  • In R sollte das ein NA sein

Werte durch NAs ersetzen 2/4

d_ns <- read_delim(
  "daten/produkt_nieder_monat_18910101_20171231_00555-2.txt",
  delim = ";", , trim_ws=TRUE,
  locale = locale(decimal_mark = ".", grouping_mark = ",")
)
Rows: 1144 Columns: 9
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (1): eor
dbl (8): STATIONS_ID, MESS_DATUM_BEGINN, MESS_DATUM_ENDE, QN_6, MO_NSH, MO_R...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Werte durch NAs ersetzen 3/4

d_ns
# A tibble: 1,144 × 9
   STATIONS_ID MESS_DATUM_BEGINN MESS_DATUM_ENDE  QN_6 MO_NSH MO_RR MO_SH_S
         <dbl>             <dbl>           <dbl> <dbl>  <dbl> <dbl>   <dbl>
 1         555          18910101        18910131     5   -999    61    -999
 2         555          18910201        18910228     5   -999     9    -999
 3         555          18910301        18910331     5   -999   105    -999
 4         555          18910401        18910430     5   -999    64    -999
 5         555          18910501        18910531     5   -999    61    -999
 6         555          18910601        18910630     5   -999   142    -999
 7         555          18910701        18910731     5   -999   117    -999
 8         555          18910801        18910831     5   -999    54    -999
 9         555          18910901        18910930     5   -999    20    -999
10         555          18911001        18911031     5   -999    38    -999
# ℹ 1,134 more rows
# ℹ 2 more variables: MX_RS <dbl>, eor <chr>
  • Wert -999 in fast allen Spalten
  • Damit kann man nicht arbeiten

Werte durch NAs ersetzen 4/4

d_ns |> mutate(MO_NSH = na_if(MO_NSH, -999)) 
# A tibble: 1,144 × 9
   STATIONS_ID MESS_DATUM_BEGINN MESS_DATUM_ENDE  QN_6 MO_NSH MO_RR MO_SH_S
         <dbl>             <dbl>           <dbl> <dbl>  <dbl> <dbl>   <dbl>
 1         555          18910101        18910131     5     NA    61    -999
 2         555          18910201        18910228     5     NA     9    -999
 3         555          18910301        18910331     5     NA   105    -999
 4         555          18910401        18910430     5     NA    64    -999
 5         555          18910501        18910531     5     NA    61    -999
 6         555          18910601        18910630     5     NA   142    -999
 7         555          18910701        18910731     5     NA   117    -999
 8         555          18910801        18910831     5     NA    54    -999
 9         555          18910901        18910930     5     NA    20    -999
10         555          18911001        18911031     5     NA    38    -999
# ℹ 1,134 more rows
# ℹ 2 more variables: MX_RS <dbl>, eor <chr>
  • Mit na_if(Y, x) alle Werte x in Spalte Y durch NA ersetzen

Werte auftrennen 1/2

d_z <- tibble(X = c("10, A, 4.3", "11, X, 1.9", "2, R, 3.3"))
kable(d_z)
X
10, A, 4.3
11, X, 1.9
2, R, 3.3
  • Drei Werte in jeder Beobachtung

Werte auftrennen 2/2

d_z |> separate(col=X, into=c("Wert", "Name", "Laenge"), sep=",") |> kable()
Wert Name Laenge
10 A 4.3
11 X 1.9
2 R 3.3
  • Funktion separate(...) verteilt Werte auf Spalten
  • Spalte mit Ausgangswerten angeben mit col
  • Neue Spalten in Parameter into (Namen als Zeichenkette)
  • Mit sep angeben, welches Zeichen die Einträge trennt

Gruppiertes mutate() 1/2

d_energietraeger |> kable() |> scroll_box(height = "400px")
Energieträger Jahr Verbrauch
Mineralöl 1990 5216.92300
Mineralöl 1991 5524.70800
Mineralöl 1992 5611.94200
Mineralöl 1993 5731.41300
Mineralöl 1994 5680.95500
Mineralöl 1995 5688.92600
Mineralöl 1996 5808.30100
Mineralöl 1997 5753.11400
Mineralöl 1998 5775.16700
Mineralöl 1999 5598.53800
Mineralöl 2000 5498.56600
Mineralöl 2001 5577.00200
Mineralöl 2002 5381.23600
Mineralöl 2003 5286.30900
Mineralöl 2004 5214.09100
Mineralöl 2005 5165.79000
Mineralöl 2006 5120.72600
Mineralöl 2007 4625.91500
Mineralöl 2008 4903.52000
Mineralöl 2009 4635.29600
Mineralöl 2010 4683.57000
Mineralöl 2011 4524.52500
Mineralöl 2012 4526.54500
Mineralöl 2013 4627.89900
Mineralöl 2014 4492.77200
Mineralöl 2015 4491.49900
Mineralöl 2016 4566.07900
Mineralöl 2017 4698.46200
Steinkohle 1990 2306.17200
Steinkohle 1991 2329.96900
Steinkohle 1992 2195.86900
Steinkohle 1993 2138.62400
Steinkohle 1994 2139.90300
Steinkohle 1995 2059.64200
Steinkohle 1996 2089.91800
Steinkohle 1997 2065.03300
Steinkohle 1998 2058.96400
Steinkohle 1999 1967.25100
Steinkohle 2000 2021.36000
Steinkohle 2001 1948.64600
Steinkohle 2002 1926.71300
Steinkohle 2003 2009.71100
Steinkohle 2004 1909.16072
Steinkohle 2005 1807.57129
Steinkohle 2006 1964.27840
Steinkohle 2007 2017.05450
Steinkohle 2008 1800.16443
Steinkohle 2009 1496.34684
Steinkohle 2010 1714.44000
Steinkohle 2011 1714.52500
Steinkohle 2012 1725.32000
Steinkohle 2013 1839.51600
Steinkohle 2014 1759.26000
Steinkohle 2015 1728.70600
Steinkohle 2016 1693.07300
Steinkohle 2017 1486.66700
Braunkohle 1990 3200.71500
Braunkohle 1991 2506.97400
Braunkohle 1992 2176.24000
Braunkohle 1993 1982.66300
Braunkohle 1994 1861.23900
Braunkohle 1995 1734.45600
Braunkohle 1996 1687.84500
Braunkohle 1997 1595.42900
Braunkohle 1998 1514.00500
Braunkohle 1999 1472.77600
Braunkohle 2000 1550.11800
Braunkohle 2001 1633.04000
Braunkohle 2002 1662.93900
Braunkohle 2003 1639.23700
Braunkohle 2004 1647.94322
Braunkohle 2005 1595.74742
Braunkohle 2006 1575.57517
Braunkohle 2007 1612.77771
Braunkohle 2008 1554.34520
Braunkohle 2009 1507.10594
Braunkohle 2010 1511.78000
Braunkohle 2011 1564.32300
Braunkohle 2012 1644.54700
Braunkohle 2013 1628.71900
Braunkohle 2014 1573.96200
Braunkohle 2015 1565.49500
Braunkohle 2016 1510.69300
Braunkohle 2017 1508.28200
Erdgas, Erdölgas 1990 2292.78000
Erdgas, Erdölgas 1991 2409.09400
Erdgas, Erdölgas 1992 2381.85700
Erdgas, Erdölgas 1993 2520.40800
Erdgas, Erdölgas 1994 2566.53800
Erdgas, Erdölgas 1995 2798.54500
Erdgas, Erdölgas 1996 3131.67600
Erdgas, Erdölgas 1997 2991.72100
Erdgas, Erdölgas 1998 3019.14100
Erdgas, Erdölgas 1999 3010.28700
Erdgas, Erdölgas 2000 2985.28500
Erdgas, Erdölgas 2001 3148.13500
Erdgas, Erdölgas 2002 3143.26000
Erdgas, Erdölgas 2003 3181.39100
Erdgas, Erdölgas 2004 3197.55800
Erdgas, Erdölgas 2005 3250.11777
Erdgas, Erdölgas 2006 3312.24827
Erdgas, Erdölgas 2007 3190.90305
Erdgas, Erdölgas 2008 3222.02269
Erdgas, Erdölgas 2009 3039.48438
Erdgas, Erdölgas 2010 3170.56500
Erdgas, Erdölgas 2011 2910.98600
Erdgas, Erdölgas 2012 2919.96200
Erdgas, Erdölgas 2013 3059.07600
Erdgas, Erdölgas 2014 2660.22100
Erdgas, Erdölgas 2015 2770.33000
Erdgas, Erdölgas 2016 3055.85100
Erdgas, Erdölgas 2017 3230.26800
Kernenergie 1990 1667.54400
Kernenergie 1991 1608.65500
Kernenergie 1992 1733.03100
Kernenergie 1993 1674.88500
Kernenergie 1994 1650.14800
Kernenergie 1995 1681.89000
Kernenergie 1996 1764.01600
Kernenergie 1997 1859.04100
Kernenergie 1998 1764.37500
Kernenergie 1999 1855.48000
Kernenergie 2000 1851.14800
Kernenergie 2001 1868.25500
Kernenergie 2002 1798.12100
Kernenergie 2003 1800.64000
Kernenergie 2004 1822.45186
Kernenergie 2005 1778.59400
Kernenergie 2006 1825.68900
Kernenergie 2007 1533.07500
Kernenergie 2008 1623.00700
Kernenergie 2009 1471.97400
Kernenergie 2010 1533.33000
Kernenergie 2011 1177.85800
Kernenergie 2012 1085.01100
Kernenergie 2013 1061.34500
Kernenergie 2014 1059.58300
Kernenergie 2015 1001.29700
Kernenergie 2016 923.27600
Kernenergie 2017 832.62300
Wasser- und Windkraft 1) 3) 1990 57.86700
Wasser- und Windkraft 1) 3) 1991 52.74700
Wasser- und Windkraft 1) 3) 1992 62.34200
Wasser- und Windkraft 1) 3) 1993 63.63400
Wasser- und Windkraft 1) 3) 1994 66.62100
Wasser- und Windkraft 1) 3) 1995 83.23600
Wasser- und Windkraft 1) 3) 1996 73.28600
Wasser- und Windkraft 1) 3) 1997 77.47000
Wasser- und Windkraft 1) 3) 1998 79.91800
Wasser- und Windkraft 1) 3) 1999 91.19500
Wasser- und Windkraft 1) 3) 2000 126.86800
Wasser- und Windkraft 1) 3) 2001 124.06800
Wasser- und Windkraft 1) 3) 2002 145.46200
Wasser- und Windkraft 1) 3) 2003 132.17760
Wasser- und Windkraft 1) 3) 2004 165.51360
Wasser- und Windkraft 1) 3) 2005 173.13120
Wasser- und Windkraft 1) 3) 2006 190.69920
Wasser- und Windkraft 1) 3) 2007 230.24520
Wasser- und Windkraft 1) 3) 2008 235.58400
Wasser- und Windkraft 1) 3) 2009 231.39360
Wasser- und Windkraft 1) 3) 2010 253.55500
Wasser- und Windkraft 1) 3) 2011 309.22600
Wasser- und Windkraft 1) 3) 2012 355.69800
Wasser- und Windkraft 1) 3) 2013 380.57800
Wasser- und Windkraft 1) 3) 2014 406.80200
Wasser- und Windkraft 1) 3) 2015 492.87500
Wasser- und Windkraft 1) 3) 2016 499.36700
Wasser- und Windkraft 1) 3) 2017 599.96800
andere Erneuerbare 2) 1990 138.55700
andere Erneuerbare 2) 1991 144.58800
andere Erneuerbare 2) 1992 144.84700
andere Erneuerbare 2) 1993 164.20200
andere Erneuerbare 2) 1994 186.13100
andere Erneuerbare 2) 1995 191.47600
andere Erneuerbare 2) 1996 196.53000
andere Erneuerbare 2) 1997 266.98200
andere Erneuerbare 2) 1998 299.25300
andere Erneuerbare 2) 1999 312.18700
andere Erneuerbare 2) 2000 289.70600
andere Erneuerbare 2) 2001 308.14600
andere Erneuerbare 2) 2002 310.01400
andere Erneuerbare 2) 2003 428.65594
andere Erneuerbare 2) 2004 484.61252
andere Erneuerbare 2) 2005 596.24640
andere Erneuerbare 2) 2006 747.86391
andere Erneuerbare 2) 2007 886.28852
andere Erneuerbare 2) 2008 911.44039
andere Erneuerbare 2) 2009 969.63844
andere Erneuerbare 2) 2010 1159.64000
andere Erneuerbare 2) 2011 1153.28000
andere Erneuerbare 2) 2012 1029.11100
andere Erneuerbare 2) 2013 1118.07800
andere Erneuerbare 2) 2014 1111.73700
andere Erneuerbare 2) 2015 1150.90900
andere Erneuerbare 2) 2016 1176.87800
andere Erneuerbare 2) 2017 1181.38700
Außenhandelssaldo Strom 1990 2.84000
Außenhandelssaldo Strom 1991 -2.07100
Außenhandelssaldo Strom 1992 -19.15200
Außenhandelssaldo Strom 1993 3.12800
Außenhandelssaldo Strom 1994 8.41300
Außenhandelssaldo Strom 1995 17.36600
Außenhandelssaldo Strom 1996 -18.95800
Außenhandelssaldo Strom 1997 -8.45700
Außenhandelssaldo Strom 1998 -2.29700
Außenhandelssaldo Strom 1999 3.74400
Außenhandelssaldo Strom 2000 11.00500
Außenhandelssaldo Strom 2001 9.80600
Außenhandelssaldo Strom 2002 2.47700
Außenhandelssaldo Strom 2003 -29.05200
Außenhandelssaldo Strom 2004 -26.30160
Außenhandelssaldo Strom 2005 -30.51000
Außenhandelssaldo Strom 2006 -71.17560
Außenhandelssaldo Strom 2007 -68.81400
Außenhandelssaldo Strom 2008 -80.82000
Außenhandelssaldo Strom 2009 -51.59600
Außenhandelssaldo Strom 2010 -63.74500
Außenhandelssaldo Strom 2011 -22.57600
Außenhandelssaldo Strom 2012 -83.12100
Außenhandelssaldo Strom 2013 -115.89900
Außenhandelssaldo Strom 2014 -121.99300
Außenhandelssaldo Strom 2015 -173.81700
Außenhandelssaldo Strom 2016 -181.89000
Außenhandelssaldo Strom 2017 -188.85200
Sonstige 1990 21.83900
Sonstige 1991 35.10700
Sonstige 1992 32.48000
Sonstige 1993 30.06300
Sonstige 1994 25.30100
Sonstige 1995 13.41900
Sonstige 1996 13.32300
Sonstige 1997 13.59500
Sonstige 1998 12.04300
Sonstige 1999 11.81900
Sonstige 2000 67.76976
Sonstige 2001 61.97603
Sonstige 2002 57.25000
Sonstige 2003 151.00631
Sonstige 2004 176.31183
Sonstige 2005 221.67024
Sonstige 2006 170.88933
Sonstige 2007 169.42872
Sonstige 2008 210.42267
Sonstige 2009 231.22275
Sonstige 2010 253.62100
Sonstige 2011 267.18900
Sonstige 2012 243.98400
Sonstige 2013 222.29600
Sonstige 2014 237.24300
Sonstige 2015 234.21500
Sonstige 2016 247.28700
Sonstige 2017 245.62200
  • Ziel: Neue Variable mit dem anteiligen Energieverbrauch
    • 100 x Energieverbrauch / Gesamtverbrauch im Jahr

Gruppiertes mutate() 2/2

d_energietraeger |>
  group_by(Jahr) |>
  mutate(Anteil = 100 * Verbrauch / sum(Verbrauch)) |>
  kable() |> scroll_box(height = "300px")
Energieträger Jahr Verbrauch Anteil
Mineralöl 1990 5216.92300 35.0006042
Mineralöl 1991 5524.70800 37.8151581
Mineralöl 1992 5611.94200 39.1910279
Mineralöl 1993 5731.41300 40.0545460
Mineralöl 1994 5680.95500 40.0483277
Mineralöl 1995 5688.92600 39.8692518
Mineralöl 1996 5808.30100 39.3891619
Mineralöl 1997 5753.11400 39.3673351
Mineralöl 1998 5775.16700 39.7723188
Mineralöl 1999 5598.53800 39.0869911
Mineralöl 2000 5498.56600 38.1796454
Mineralöl 2001 5577.00200 37.9928733
Mineralöl 2002 5381.23600 37.2985371
Mineralöl 2003 5286.30900 36.2074078
Mineralöl 2004 5214.09100 35.7341450
Mineralöl 2005 5165.79000 35.4833278
Mineralöl 2006 5120.72600 34.5136969
Mineralöl 2007 4625.91500 32.5840400
Mineralöl 2008 4903.52000 34.1003264
Mineralöl 2009 4635.29600 34.2572014
Mineralöl 2010 4683.57000 32.9440134
Mineralöl 2011 4524.52500 33.2701905
Mineralöl 2012 4526.54500 33.6619753
Mineralöl 2013 4627.89900 33.4830723
Mineralöl 2014 4492.77200 34.0888679
Mineralöl 2015 4491.49900 33.8686872
Mineralöl 2016 4566.07900 33.8463394
Mineralöl 2017 4698.46200 34.5616774
Steinkohle 1990 2306.17200 15.4722263
Steinkohle 1991 2329.96900 15.9480186
Steinkohle 1992 2195.86900 15.3348633
Steinkohle 1993 2138.62400 14.9459851
Steinkohle 1994 2139.90300 15.0854102
Steinkohle 1995 2059.64200 14.4344267
Steinkohle 1996 2089.91800 14.1728396
Steinkohle 1997 2065.03300 14.1305815
Steinkohle 1998 2058.96400 14.1796372
Steinkohle 1999 1967.25100 13.7346433
Steinkohle 2000 2021.36000 14.0354427
Steinkohle 2001 1948.64600 13.2749927
Steinkohle 2002 1926.71300 13.3544740
Steinkohle 2003 2009.71100 13.7650723
Steinkohle 2004 1909.16072 13.0842031
Steinkohle 2005 1807.57129 12.4160380
Steinkohle 2006 1964.27840 13.2392378
Steinkohle 2007 2017.05450 14.2077371
Steinkohle 2008 1800.16443 12.5188018
Steinkohle 2009 1496.34684 11.0587663
Steinkohle 2010 1714.44000 12.0592912
Steinkohle 2011 1714.52500 12.6074170
Steinkohle 2012 1725.32000 12.8304654
Steinkohle 2013 1839.51600 13.3089869
Steinkohle 2014 1759.26000 13.3483697
Steinkohle 2015 1728.70600 13.0355150
Steinkohle 2016 1693.07300 12.5500070
Steinkohle 2017 1486.66700 10.9358563
Braunkohle 1990 3200.71500 21.4737612
Braunkohle 1991 2506.97400 17.1595708
Braunkohle 1992 2176.24000 15.1977840
Braunkohle 1993 1982.66300 13.8560363
Braunkohle 1994 1861.23900 13.1209470
Braunkohle 1995 1734.45600 12.1554513
Braunkohle 1996 1687.84500 11.4461699
Braunkohle 1997 1595.42900 10.9171812
Braunkohle 1998 1514.00500 10.4266231
Braunkohle 1999 1472.77600 10.2823956
Braunkohle 2000 1550.11800 10.7633437
Braunkohle 2001 1633.04000 11.1249524
Braunkohle 2002 1662.93900 11.5261981
Braunkohle 2003 1639.23700 11.2275924
Braunkohle 2004 1647.94322 11.2939805
Braunkohle 2005 1595.74742 10.9610396
Braunkohle 2006 1575.57517 10.6193778
Braunkohle 2007 1612.77771 11.3600906
Braunkohle 2008 1554.34520 10.8093122
Braunkohle 2009 1507.10594 11.1382815
Braunkohle 2010 1511.78000 10.6337902
Braunkohle 2011 1564.32300 11.5029366
Braunkohle 2012 1644.54700 12.2297912
Braunkohle 2013 1628.71900 11.7838605
Braunkohle 2014 1573.96200 11.9424228
Braunkohle 2015 1565.49500 11.8048029
Braunkohle 2016 1510.69300 11.1981041
Braunkohle 2017 1508.28200 11.0948553
Erdgas, Erdölgas 1990 2292.78000 15.3823787
Erdgas, Erdölgas 1991 2409.09400 16.4896082
Erdgas, Erdölgas 1992 2381.85700 16.6337115
Erdgas, Erdölgas 1993 2520.40800 17.6141203
Erdgas, Erdölgas 1994 2566.53800 18.0930063
Erdgas, Erdölgas 1995 2798.54500 19.6128224
Erdgas, Erdölgas 1996 3131.67600 21.2375517
Erdgas, Erdölgas 1997 2991.72100 20.4717103
Erdgas, Erdölgas 1998 3019.14100 20.7921673
Erdgas, Erdölgas 1999 3010.28700 21.0167478
Erdgas, Erdölgas 2000 2985.28500 20.7285177
Erdgas, Erdölgas 2001 3148.13500 21.4464141
Erdgas, Erdölgas 2002 3143.26000 21.7866304
Erdgas, Erdölgas 2003 3181.39100 21.7902361
Erdgas, Erdölgas 2004 3197.55800 21.9140788
Erdgas, Erdölgas 2005 3250.11777 22.3247546
Erdgas, Erdölgas 2006 3312.24827 22.3245557
Erdgas, Erdölgas 2007 3190.90305 22.4760966
Erdgas, Erdölgas 2008 3222.02269 22.4067661
Erdgas, Erdölgas 2009 3039.48438 22.4633397
Erdgas, Erdölgas 2010 3170.56500 22.3016066
Erdgas, Erdölgas 2011 2910.98600 21.4053539
Erdgas, Erdölgas 2012 2919.96200 21.7145060
Erdgas, Erdölgas 2013 3059.07600 22.1325623
Erdgas, Erdölgas 2014 2660.22100 20.1844034
Erdgas, Erdölgas 2015 2770.33000 20.8900058
Erdgas, Erdölgas 2016 3055.85100 22.6516821
Erdgas, Erdölgas 2017 3230.26800 23.7617076
Kernenergie 1990 1667.54400 11.1876383
Kernenergie 1991 1608.65500 11.0108160
Kernenergie 1992 1733.03100 12.1026316
Kernenergie 1993 1674.88500 11.7050993
Kernenergie 1994 1650.14800 11.6328448
Kernenergie 1995 1681.89000 11.7870572
Kernenergie 1996 1764.01600 11.9627257
Kernenergie 1997 1859.04100 12.7210220
Kernenergie 1998 1764.37500 12.1508668
Kernenergie 1999 1855.48000 12.9542981
Kernenergie 2000 1851.14800 12.8535648
Kernenergie 2001 1868.25500 12.7273355
Kernenergie 2002 1798.12100 12.4631744
Kernenergie 2003 1800.64000 12.3330866
Kernenergie 2004 1822.45186 12.4899544
Kernenergie 2005 1778.59400 12.2169956
Kernenergie 2006 1825.68900 12.3051452
Kernenergie 2007 1533.07500 10.7986803
Kernenergie 2008 1623.00700 11.2868039
Kernenergie 2009 1471.97400 10.8786386
Kernenergie 2010 1533.33000 10.7853719
Kernenergie 2011 1177.85800 8.6611435
Kernenergie 2012 1085.01100 8.0687618
Kernenergie 2013 1061.34500 7.6788822
Kernenergie 2014 1059.58300 8.0395767
Kernenergie 2015 1001.29700 7.5504002
Kernenergie 2016 923.27600 6.8438397
Kernenergie 2017 832.62300 6.1247377
Wasser- und Windkraft 1) 3) 1990 57.86700 0.3882327
Wasser- und Windkraft 1) 3) 1991 52.74700 0.3610392
Wasser- und Windkraft 1) 3) 1992 62.34200 0.4353657
Wasser- und Windkraft 1) 3) 1993 63.63400 0.4447125
Wasser- und Windkraft 1) 3) 1994 66.62100 0.4696498
Wasser- und Windkraft 1) 3) 1995 83.23600 0.5833363
Wasser- und Windkraft 1) 3) 1996 73.28600 0.4969911
Wasser- und Windkraft 1) 3) 1997 77.47000 0.5301107
Wasser- und Windkraft 1) 3) 1998 79.91800 0.5503779
Wasser- und Windkraft 1) 3) 1999 91.19500 0.6366909
Wasser- und Windkraft 1) 3) 2000 126.86800 0.8809161
Wasser- und Windkraft 1) 3) 2001 124.06800 0.8452032
Wasser- und Windkraft 1) 3) 2002 145.46200 1.0082293
Wasser- und Windkraft 1) 3) 2003 132.17760 0.9053213
Wasser- und Windkraft 1) 3) 2004 165.51360 1.1343275
Wasser- und Windkraft 1) 3) 2005 173.13120 1.1892220
Wasser- und Windkraft 1) 3) 2006 190.69920 1.2853127
Wasser- und Windkraft 1) 3) 2007 230.24520 1.6218021
Wasser- und Windkraft 1) 3) 2008 235.58400 1.6383111
Wasser- und Windkraft 1) 3) 2009 231.39360 1.7101167
Wasser- und Windkraft 1) 3) 2010 253.55500 1.7834941
Wasser- und Windkraft 1) 3) 2011 309.22600 2.2738316
Wasser- und Windkraft 1) 3) 2012 355.69800 2.6451736
Wasser- und Windkraft 1) 3) 2013 380.57800 2.7535002
Wasser- und Windkraft 1) 3) 2014 406.80200 3.0866066
Wasser- und Windkraft 1) 3) 2015 492.87500 3.7165831
Wasser- und Windkraft 1) 3) 2016 499.36700 3.7015884
Wasser- und Windkraft 1) 3) 2017 599.96800 4.4133379
andere Erneuerbare 2) 1990 138.55700 0.9295860
andere Erneuerbare 2) 1991 144.58800 0.9896664
andere Erneuerbare 2) 1992 144.84700 1.0115398
andere Erneuerbare 2) 1993 164.20200 1.1475419
andere Erneuerbare 2) 1994 186.13100 1.3121447
andere Erneuerbare 2) 1995 191.47600 1.3419062
andere Erneuerbare 2) 1996 196.53000 1.3327739
andere Erneuerbare 2) 1997 266.98200 1.8269010
andere Erneuerbare 2) 1998 299.25300 2.0608903
andere Erneuerbare 2) 1999 312.18700 2.1795780
andere Erneuerbare 2) 2000 289.70600 2.0115922
andere Erneuerbare 2) 2001 308.14600 2.0992196
andere Erneuerbare 2) 2002 310.01400 2.1487756
andere Erneuerbare 2) 2003 428.65594 2.9359843
andere Erneuerbare 2) 2004 484.61252 3.3212336
andere Erneuerbare 2) 2005 596.24640 4.0955607
andere Erneuerbare 2) 2006 747.86391 5.0406033
andere Erneuerbare 2) 2007 886.28852 6.2428429
andere Erneuerbare 2) 2008 911.44039 6.3383885
andere Erneuerbare 2) 2009 969.63844 7.1661226
andere Erneuerbare 2) 2010 1159.64000 8.1568538
andere Erneuerbare 2) 2011 1153.28000 8.4804140
andere Erneuerbare 2) 2012 1029.11100 7.6530575
andere Erneuerbare 2) 2013 1118.07800 8.0893482
andere Erneuerbare 2) 2014 1111.73700 8.4352947
andere Erneuerbare 2) 2015 1150.90900 8.6785674
andere Erneuerbare 2) 2016 1176.87800 8.7236800
andere Erneuerbare 2) 2017 1181.38700 8.6902302
Außenhandelssaldo Strom 1990 2.84000 0.0190537
Außenhandelssaldo Strom 1991 -2.07100 -0.0141754
Außenhandelssaldo Strom 1992 -19.15200 -0.1337481
Außenhandelssaldo Strom 1993 3.12800 0.0218603
Außenhandelssaldo Strom 1994 8.41300 0.0593081
Außenhandelssaldo Strom 1995 17.36600 0.1217048
Außenhandelssaldo Strom 1996 -18.95800 -0.1285642
Außenhandelssaldo Strom 1997 -8.45700 -0.0578695
Außenhandelssaldo Strom 1998 -2.29700 -0.0158189
Außenhandelssaldo Strom 1999 3.74400 0.0261393
Außenhandelssaldo Strom 2000 11.00500 0.0764139
Außenhandelssaldo Strom 2001 9.80600 0.0668026
Außenhandelssaldo Strom 2002 2.47700 0.0171686
Außenhandelssaldo Strom 2003 -29.05200 -0.1989853
Außenhandelssaldo Strom 2004 -26.30160 -0.1802548
Außenhandelssaldo Strom 2005 -30.51000 -0.2095703
Außenhandelssaldo Strom 2006 -71.17560 -0.4797236
Außenhandelssaldo Strom 2007 -68.81400 -0.4847123
Außenhandelssaldo Strom 2008 -80.82000 -0.5620429
Außenhandelssaldo Strom 2009 -51.59600 -0.3813208
Außenhandelssaldo Strom 2010 -63.74500 -0.4483794
Außenhandelssaldo Strom 2011 -22.57600 -0.1660081
Außenhandelssaldo Strom 2012 -83.12100 -0.6181353
Außenhandelssaldo Strom 2013 -115.89900 -0.8385349
Außenhandelssaldo Strom 2014 -121.99300 -0.9256208
Außenhandelssaldo Strom 2015 -173.81700 -1.3106879
Außenhandelssaldo Strom 2016 -181.89000 -1.3482707
Außenhandelssaldo Strom 2017 -188.85200 -1.3891869
Sonstige 1990 21.83900 0.1465190
Sonstige 1991 35.10700 0.2402981
Sonstige 1992 32.48000 0.2268243
Sonstige 1993 30.06300 0.2100982
Sonstige 1994 25.30100 0.1783613
Sonstige 1995 13.41900 0.0940433
Sonstige 1996 13.32300 0.0903503
Sonstige 1997 13.59500 0.0930277
Sonstige 1998 12.04300 0.0829375
Sonstige 1999 11.81900 0.0825160
Sonstige 2000 67.76976 0.4705637
Sonstige 2001 61.97603 0.4222067
Sonstige 2002 57.25000 0.3968124
Sonstige 2003 151.00631 1.0342844
Sonstige 2004 176.31183 1.2083319
Sonstige 2005 221.67024 1.5226321
Sonstige 2006 170.88933 1.1517942
Sonstige 2007 169.42872 1.1934227
Sonstige 2008 210.42267 1.4633328
Sonstige 2009 231.22275 1.7088541
Sonstige 2010 253.62100 1.7839583
Sonstige 2011 267.18900 1.9647209
Sonstige 2012 243.98400 1.8144044
Sonstige 2013 222.29600 1.6083223
Sonstige 2014 237.24300 1.8000792
Sonstige 2015 234.21500 1.7661263
Sonstige 2016 247.28700 1.8330300
Sonstige 2017 245.62200 1.8067845
  • Daten nach Jahren gruppieren
  • Dann berechnet sum() die Summe in einer Gruppe
  • Ergebnis auf jeden Fall kontrollieren

Gruppiertes filter() 1/2

d_unistrasse
# A tibble: 20,707 × 6
   Datum               Fz              L     v D15                 Uhrzeit
   <dttm>              <chr>       <dbl> <dbl> <dttm>              <time> 
 1 2017-12-13 00:03:31 PKW           421    70 2017-12-13 00:00:00 03'31" 
 2 2017-12-13 00:03:37 PKW           454    59 2017-12-13 00:00:00 03'37" 
 3 2017-12-13 00:03:53 PKW           456    79 2017-12-13 00:00:00 03'53" 
 4 2017-12-13 00:05:42 PKW           479    58 2017-12-13 00:00:00 05'42" 
 5 2017-12-13 00:06:51 PKW           421    60 2017-12-13 00:00:00 06'51" 
 6 2017-12-13 00:07:08 Transporter   487    57 2017-12-13 00:00:00 07'08" 
 7 2017-12-13 00:08:11 PKW           387    58 2017-12-13 00:00:00 08'11" 
 8 2017-12-13 00:09:41 PKW           478    54 2017-12-13 00:00:00 09'41" 
 9 2017-12-13 00:11:42 Transporter   493    56 2017-12-13 00:00:00 11'42" 
10 2017-12-13 00:17:31 PKW           427    61 2017-12-13 00:15:00 17'31" 
# ℹ 20,697 more rows
  • Gesucht ist das schnellste Fahrzeug aus jeder Gruppe

Gruppiertes filter() 2/2

d_unistrasse |> select(-D15) |>
  group_by(Fz) |>
  filter(v == max(v)) |>
  kable()
Datum Fz L v Uhrzeit
2017-12-13 05:48:36 Lastzug 926 82 05:48:36
2017-12-13 14:27:53 Zweirad 184 71 14:27:53
2017-12-14 15:54:48 LKW 728 87 15:54:48
2017-12-14 20:49:15 PKW 479 108 20:49:15
2017-12-14 21:15:10 Transporter 508 96 21:15:10
  • Nach Fahrzeugtyp gruppieren
  • Mit max(Geschwindigkeit) die schnellste Messung pro Gruppe heraussuchen
  • Beobachtung mit der größten Geschwindigkeit herausfiltern

Werte ersetzen mit recode() 1/2

kable(d_et)
Energieträger 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
Mineralöl 5216.923 5524.708 5611.942 5731.413 5680.955 5688.926 5808.301 5753.114 5775.167 5598.538 5498.56600 5577.00200 5381.236 5286.3090 5214.0910 5165.7900 5120.7260 4625.9150 4903.5200 4635.2960 4683.570 4524.525 4526.545 4627.899 4492.772 4491.499 4566.079 4698.462
Steinkohle 2306.172 2329.969 2195.869 2138.624 2139.903 2059.642 2089.918 2065.033 2058.964 1967.251 2021.36000 1948.64600 1926.713 2009.7110 1909.1607 1807.5713 1964.2784 2017.0545 1800.1644 1496.3468 1714.440 1714.525 1725.320 1839.516 1759.260 1728.706 1693.073 1486.667
Braunkohle 3200.715 2506.974 2176.240 1982.663 1861.239 1734.456 1687.845 1595.429 1514.005 1472.776 1550.11800 1633.04000 1662.939 1639.2370 1647.9432 1595.7474 1575.5752 1612.7777 1554.3452 1507.1059 1511.780 1564.323 1644.547 1628.719 1573.962 1565.495 1510.693 1508.282
Erdgas, Erdölgas 2292.780 2409.094 2381.857 2520.408 2566.538 2798.545 3131.676 2991.721 3019.141 3010.287 2985.28500 3148.13500 3143.260 3181.3910 3197.5580 3250.1178 3312.2483 3190.9031 3222.0227 3039.4844 3170.565 2910.986 2919.962 3059.076 2660.221 2770.330 3055.851 3230.268
Kernenergie 1667.544 1608.655 1733.031 1674.885 1650.148 1681.890 1764.016 1859.041 1764.375 1855.480 1851.14800 1868.25500 1798.121 1800.6400 1822.4519 1778.5940 1825.6890 1533.0750 1623.0070 1471.9740 1533.330 1177.858 1085.011 1061.345 1059.583 1001.297 923.276 832.623
Wasser- und Windkraft 1) 3) 57.867 52.747 62.342 63.634 66.621 83.236 73.286 77.470 79.918 91.195 126.86800 124.06800 145.462 132.1776 165.5136 173.1312 190.6992 230.2452 235.5840 231.3936 253.555 309.226 355.698 380.578 406.802 492.875 499.367 599.968
andere Erneuerbare 2) 138.557 144.588 144.847 164.202 186.131 191.476 196.530 266.982 299.253 312.187 289.70600 308.14600 310.014 428.6559 484.6125 596.2464 747.8639 886.2885 911.4404 969.6384 1159.640 1153.280 1029.111 1118.078 1111.737 1150.909 1176.878 1181.387
Außenhandelssaldo Strom 2.840 -2.071 -19.152 3.128 8.413 17.366 -18.958 -8.457 -2.297 3.744 11.00500 9.80600 2.477 -29.0520 -26.3016 -30.5100 -71.1756 -68.8140 -80.8200 -51.5960 -63.745 -22.576 -83.121 -115.899 -121.993 -173.817 -181.890 -188.852
Sonstige 21.839 35.107 32.480 30.063 25.301 13.419 13.323 13.595 12.043 11.819 67.76976 61.97603 57.250 151.0063 176.3118 221.6702 170.8893 169.4287 210.4227 231.2228 253.621 267.189 243.984 222.296 237.243 234.215 247.287 245.622
  • Bezeichnungen teilweise zu lang
  • Verweise auf Erläuterungen für statistische Auswertung nicht hilfreich

Werte ersetzen mit recode() 2/2

d_et |> mutate(
    Energieträger = recode(
      Energieträger, 
      "Erdgas, Erdölgas" = "Gas",
      "Wasser- und Windkraft 1) 3)" = "Wasser/Wind",
      "andere Erneuerbare 2)" = "andere Erneuerbare"
    )
  ) |>
  kable()
Energieträger 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
Mineralöl 5216.923 5524.708 5611.942 5731.413 5680.955 5688.926 5808.301 5753.114 5775.167 5598.538 5498.56600 5577.00200 5381.236 5286.3090 5214.0910 5165.7900 5120.7260 4625.9150 4903.5200 4635.2960 4683.570 4524.525 4526.545 4627.899 4492.772 4491.499 4566.079 4698.462
Steinkohle 2306.172 2329.969 2195.869 2138.624 2139.903 2059.642 2089.918 2065.033 2058.964 1967.251 2021.36000 1948.64600 1926.713 2009.7110 1909.1607 1807.5713 1964.2784 2017.0545 1800.1644 1496.3468 1714.440 1714.525 1725.320 1839.516 1759.260 1728.706 1693.073 1486.667
Braunkohle 3200.715 2506.974 2176.240 1982.663 1861.239 1734.456 1687.845 1595.429 1514.005 1472.776 1550.11800 1633.04000 1662.939 1639.2370 1647.9432 1595.7474 1575.5752 1612.7777 1554.3452 1507.1059 1511.780 1564.323 1644.547 1628.719 1573.962 1565.495 1510.693 1508.282
Gas 2292.780 2409.094 2381.857 2520.408 2566.538 2798.545 3131.676 2991.721 3019.141 3010.287 2985.28500 3148.13500 3143.260 3181.3910 3197.5580 3250.1178 3312.2483 3190.9031 3222.0227 3039.4844 3170.565 2910.986 2919.962 3059.076 2660.221 2770.330 3055.851 3230.268
Kernenergie 1667.544 1608.655 1733.031 1674.885 1650.148 1681.890 1764.016 1859.041 1764.375 1855.480 1851.14800 1868.25500 1798.121 1800.6400 1822.4519 1778.5940 1825.6890 1533.0750 1623.0070 1471.9740 1533.330 1177.858 1085.011 1061.345 1059.583 1001.297 923.276 832.623
Wasser/Wind 57.867 52.747 62.342 63.634 66.621 83.236 73.286 77.470 79.918 91.195 126.86800 124.06800 145.462 132.1776 165.5136 173.1312 190.6992 230.2452 235.5840 231.3936 253.555 309.226 355.698 380.578 406.802 492.875 499.367 599.968
andere Erneuerbare 138.557 144.588 144.847 164.202 186.131 191.476 196.530 266.982 299.253 312.187 289.70600 308.14600 310.014 428.6559 484.6125 596.2464 747.8639 886.2885 911.4404 969.6384 1159.640 1153.280 1029.111 1118.078 1111.737 1150.909 1176.878 1181.387
Außenhandelssaldo Strom 2.840 -2.071 -19.152 3.128 8.413 17.366 -18.958 -8.457 -2.297 3.744 11.00500 9.80600 2.477 -29.0520 -26.3016 -30.5100 -71.1756 -68.8140 -80.8200 -51.5960 -63.745 -22.576 -83.121 -115.899 -121.993 -173.817 -181.890 -188.852
Sonstige 21.839 35.107 32.480 30.063 25.301 13.419 13.323 13.595 12.043 11.819 67.76976 61.97603 57.250 151.0063 176.3118 221.6702 170.8893 169.4287 210.4227 231.2228 253.621 267.189 243.984 222.296 237.243 234.215 247.287 245.622
  • Spalte und Ersetzungen angeben