Читать книгу R für Data Science - Hadley Wickham - Страница 72
Gruppierte Veränderungen (und Filter)
ОглавлениеGruppieren ist vor allem nützlich in Verbindung mit summarize(), doch Sie können auch mit mutate() und filter() komfortable Operationen durchführen:
Finde die schlechtesten Mitglieder jeder Gruppe:
flights_sml%>%
group_by(year,month,day)%>%
filter(rank(desc(arr_delay))<10)
#> Source: local data frame [3,306 x 7]
#> Groups: year, month, day [365]
#>
#> year month day dep_delay arr_delay distance
#> <int> <int> <int> <dbl> <dbl> <dbl>
#> 1 2013 1 1 853 851 184
#> 2 2013 1 1 290 338 1134
#> 3 2013 1 1 260 263 266
#> 4 2013 1 1 157 174 213
#> 5 2013 1 1 216 222 708
#> 6 2013 1 1 255 250 589
#> # ... with 3,300 more rows, and 1 more variables:
#> # air_time <dbl>
Ermittle alle Gruppen, die größer als ein Schwellenwert sind:
popular_dests <- flights %>%
group_by(dest) %>%
filter(n() > 365)
popular_dests
#> Source: local data frame [332,577 x 19]
#> Groups: dest [77]
#>
#> year month day dep_time sched_dep_time dep_delay
#> <int> <int> <int> <int> <int> <dbl>
#> 1 2013 1 1 517 515 2
#> 2 2013 1 1 533 529 4
#> 3 2013 1 1 542 540 2
#> 4 2013 1 1 544 545 -1
#> 5 2013 1 1 554 600 -6
#> 6 2013 1 1 554 558 -4
#> # ... with 3.326e+05 more rows, and 13 more variables:
#> # arr_time <int>, sched_arr_time <int>,
#> # arr_delay <dbl>, carrier <chr>, flight <int>,
#> # tailnum <chr>, origin <chr>, dest <chr>,
#> # air_time <dbl>, distance <dbl>, hour <dbl>,
#> # minute <dbl>, time_hour <dttm>
Standardisieren, um nach Gruppenmetriken zu berechnen:
popular_dests %>%
filter(arr_delay > 0) %>%
mutate(prop_delay = arr_delay / sum(arr_delay)) %>%
select(year:day, dest, arr_delay, prop_delay)
#> Source: local data frame [131,106 x 6]
#> Groups: dest [77]
#>
#> year month day dest arr_delay prop_delay
#> <int> <int> <int> <chr> <dbl> <dbl>
#> 1 2013 1 1 IAH 11 1.11e-04
#> 2 2013 1 1 IAH 20 2.01e-04
#> 3 2013 1 1 MIA 33 2.35e-04
#> 4 2013 1 1 ORD 12 4.24e-05
#> 5 2013 1 1 FLL 19 9.38e-05
#> 6 2013 1 1 ORD 8 2.83e-05
#> # ... with 1.311e+05 more rows
Ein gruppierter Filter ist eine gruppierte Veränderung, gefolgt von einem nicht gruppierten Filter. Im Allgemeinen vermeide ich gruppierte Filter, außer für Manipulationen auf die Schnelle: Andernfalls ist es schwer zu überprüfen, ob die Manipulationen korrekt ausgeführt wurden.
Funktionen, die naturgemäß in gruppierten Veränderungsfunktionen und Filtern arbeiten, werden als Fensterfunktionen bezeichnet (im Unterschied zu Zusammenfassungsfunktionen, die für Zusammenfassungen vorgesehen sind). Mehr über nützliche Fensterfunktionen können Sie in der entsprechenden Vignette lernen: vignette("window-functions").