Читать книгу R für Data Science - Hadley Wickham - Страница 66
Fehlende Werte
ОглавлениеSicherlich wollen Sie wissen, was das weiter vorn verwendete Argument na.rm bedeutet. Was passiert, wenn wir es nicht setzen?
flights %>%
group_by(year, month, day) %>%
summarize(mean = mean(dep_delay))
#> Source: local data frame [365 x 4]
#> Groups: year, month [?]
#>
#> year month day mean
#> <int> <int> <int> <dbl>
#> 1 2013 1 1 NA
#> 2 2013 1 2 NA
#> 3 2013 1 3 NA
#> 4 2013 1 4 NA
#> 5 2013 1 5 NA
#> 6 2013 1 6 NA
#> # ... with 359 more rows
Wir haben jede Menge fehlender Werte erhalten! Das hängt damit zusammen, dass Aggregatfunktionen die übliche Regel fehlender Werte befolgen: Wenn in den Eingabedaten irgendein fehlender Wert erscheint, ist die Ausgabe ebenfalls ein fehlender Wert. Erfreulicherweise übernehmen alle Aggregatfunktionen ein na.rm-Argument, das die fehlenden Werte vor der Berechnung entfernt:
flights %>%
group_by(year, month, day) %>%
summarize(mean = mean(dep_delay, na.rm = TRUE))
#> Source: local data frame [365 x 4]
#> Groups: year, month [?]
#>
#> year month day mean
#> <int> <int> <int> <dbl>
#> 1 2013 1 1 11.55
#> 2 2013 1 2 13.86
#> 3 2013 1 3 10.99
#> 4 2013 1 4 8.95
#> 5 2013 1 5 5.73
#> 6 2013 1 6 7.15
#> # ... with 359 more rows
In diesem Fall, wo fehlende Werte für stornierte Flüge stehen, lässt sich das Problem auch lösen, indem wir zunächst die stornierten Flüge entfernen. Wir speichern dieses Datenset, um es in den nächsten Beispielen erneut verwenden zu können:
not_cancelled <- flights %>%
filter(!is.na(dep_delay), !is.na(arr_delay))
not_cancelled %>%
group_by(year, month, day) %>%
summarize(mean = mean(dep_delay))
#> Source: local data frame [365 x 4]
#> Groups: year, month [?]
#>
#> year month day mean
#> <int> <int> <int> <dbl>
#> 1 2013 1 1 11.44
#> 2 2013 1 2 13.68
#> 3 2013 1 3 10.91
#> 4 2013 1 4 8.97
#> 5 2013 1 5 5.73
#> 6 2013 1 6 7.15
#> # ... with 359 more rows