DS1 - VL7 - Quizze zur Datenbereinigung

Wintersemester 2022/2023

Autor
Saskia Otto

Universität Hamburg, IMF

Handling fehlender Werte

Der Datensatz

Gegeben sind folgende hydrografische Messungen der Ostsee-Station 1321 vom August 2015 :

sample1
   station lat long depth pres  temp  psal doxy
1     1321  55 13.3    47  0.2 17.93 8.167   NA
2     1321  55 13.3    47  1.0    NA    NA   NA
3     1321  55 13.3    47  5.0    NA 8.328 4.60
4     1321  55 13.3    47 10.0 17.49 8.349 4.50
5     1321  55 13.3    47 15.0 17.44    NA 4.50
6     1321  55 13.3    47 20.0 17.04 8.340 4.50
7     1321  55 13.3    47 25.0    NA 8.303 4.60
8     1321  55 13.3    47 30.0 15.56    NA 4.60
9     1321  55 13.3    47 35.0 11.29 7.915 4.78
10    1321  55 13.3    47 40.0    NA 8.417   NA
11    1321  55 13.3    47 45.0 11.19    NA   NA

pres = Druck, temp = Temperatur, psal = Salinität, doxy = gelöster Sauerstoff

Quiz 1 | Zeilen mit NAs entfernen

Entfernen Sie alle Zeilen, wo es fehlende Werte bei der Salinität gibt.

sample1_mod1 <- drop_na(sample1, psal)
sample1_mod1[ ,5:8]
  pres  temp  psal doxy
1  0.2 17.93 8.167   NA
2  5.0    NA 8.328 4.60
3 10.0 17.49 8.349 4.50
4 20.0 17.04 8.340 4.50
5 25.0    NA 8.303 4.60
6 35.0 11.29 7.915 4.78
7 40.0    NA 8.417   NA

Quiz 2 | Fülle die NAs auf

Füllen Sie die NAs in allen 3 Parametern mit den jeweils vorherigen (ansonsten nachfolgenden) Werten auf.

sample1_mod2 <- fill(sample1, temp:doxy, .direction = 'downup')
sample1_mod2[ ,5:8]
   pres  temp  psal doxy
1   0.2 17.93 8.167 4.60
2   1.0 17.93 8.167 4.60
3   5.0 17.93 8.328 4.60
4  10.0 17.49 8.349 4.50
5  15.0 17.44 8.349 4.50
6  20.0 17.04 8.340 4.50
7  25.0 17.04 8.303 4.60
8  30.0 15.56 8.303 4.60
9  35.0 11.29 7.915 4.78
10 40.0 11.29 8.417 4.78
11 45.0 11.19 8.417 4.78

Quiz 3 | NAs austauschen

Tauschen Sie die NAs mit dem Median des jeweiligen Parameters aus.

sample1_mod3 <- replace_na(sample1, list(
  temp = median(sample1$temp, na.rm = TRUE),
  psal = median(sample1$psal, na.rm = TRUE),
  doxy = median(sample1$doxy, na.rm = TRUE) )
)
sample1_mod3[ ,5:8]
   pres  temp  psal doxy
1   0.2 17.93 8.167 4.60
2   1.0 17.04 8.328 4.60
3   5.0 17.04 8.328 4.60
4  10.0 17.49 8.349 4.50
5  15.0 17.44 8.328 4.50
6  20.0 17.04 8.340 4.50
7  25.0 17.04 8.303 4.60
8  30.0 15.56 8.328 4.60
9  35.0 11.29 7.915 4.78
10 40.0 17.04 8.417 4.60
11 45.0 11.19 8.328 4.60

Anpassung der Daten an ein standardisiertes Muster

Ein Vergleich

Warum sind pivot_longer() und pivot_wider() nicht perfekt symmetrisch? Begutachten Sie sorgfältig folgenden Datensatz (hier wieder ein tibble):

stocks
# A tibble: 9 × 3
   year quarter stock_return
  <dbl>   <int>        <dbl>
1  2014       2         1.07
2  2014       3         1.6 
3  2014       4         1.3 
4  2015       1         0.91
5  2015       2         0.69
6  2015       3         0.92
7  2015       4         0.94
8  2016       1         1.04
9  2016       2         1.04

Quiz 4: Formatänderung 1

Vervollständigen Sie den Code, um den Datensatz in folgendes Format zu bringen:

# A tibble: 3 × 5
   year   `2`   `3`   `4`   `1`
  <dbl> <dbl> <dbl> <dbl> <dbl>
1  2014  1.07  1.6   1.3  NA   
2  2015  0.69  0.92  0.94  0.91
3  2016  1.04 NA    NA     1.04
stocks_mod1 <- pivot_wider(
  stocks, 
  names_from = quarter, 
  values_from = stock_return
)
stocks_mod1
# A tibble: 3 × 5
   year   `2`   `3`   `4`   `1`
  <dbl> <dbl> <dbl> <dbl> <dbl>
1  2014  1.07  1.6   1.3  NA   
2  2015  0.69  0.92  0.94  0.91
3  2016  1.04 NA    NA     1.04

Quiz 5: Formatänderung 2

Vervollständigen Sie den Code, um den Datensatz zurück ins ursprüngliche Format zu bringen.

stocks_mod2 <- pivot_longer(
  stocks_mod1, 
  cols = `1`:`2`, 
  names_to = 'quarter', 
  values_to = 'stock_return'
)
stocks_mod2
# A tibble: 12 × 3
    year quarter stock_return
   <dbl> <chr>          <dbl>
 1  2014 1              NA   
 2  2014 4               1.3 
 3  2014 3               1.6 
 4  2014 2               1.07
 5  2015 1               0.91
 6  2015 4               0.94
 7  2015 3               0.92
 8  2015 2               0.69
 9  2016 1               1.04
10  2016 4              NA   
11  2016 3              NA   
12  2016 2               1.04

Quiz 6: Unterschied

Zurück zur Eingangsfrage: Warum sind pivot_longer() und pivot_wider() nicht perfekt symmetrisch?

Quiz 7: Trennen von Spalten 1

Füllen Sie den Code aus, um die Spalten quarter und year (mit ‘/’ als Trennzeichen) zusammenzufügen und diese dann wieder zu trennen:

stocks1 <- unite(stocks, quarter, year, 
  col = 'time', sep = '/')
stocks1
# A tibble: 9 × 2
  time   stock_return
  <chr>         <dbl>
1 2/2014         1.07
2 3/2014         1.6 
3 4/2014         1.3 
4 1/2015         0.91
5 2/2015         0.69
6 3/2015         0.92
7 4/2015         0.94
8 1/2016         1.04
9 2/2016         1.04
stocks2 <- separate(stocks1, time, 
  into = c('quarter', 'year'))
stocks2
# A tibble: 9 × 3
  quarter year  stock_return
  <chr>   <chr>        <dbl>
1 2       2014          1.07
2 3       2014          1.6 
3 4       2014          1.3 
4 1       2015          0.91
5 2       2015          0.69
6 3       2015          0.92
7 4       2015          0.94
8 1       2016          1.04
9 2       2016          1.04