Ich habe einen großen Datensatz, von dem ich Zusammenfassungsschätzungen (Mittelwert, Mittelwerte, Zähler usw.) einer Spalte erhalten möchte, wenn sie nach zwei anderen Spalten gruppiert wird.Iterative Zusammenfassung nach Spaltenpaaren mit purrr map
Versuchen Sie wirklich schwer zu erarbeiten, wie dies mit purrr
zu tun - hoffentlich diesen Workflow zu für zukünftige Projekte zu bekommen ... aber sehr fest.
Als reproduzierbares Beispiel funktioniert dies für die Gruppierung von am
und vs
und Abschätzen Summenwerte von mpg
library(tidyverse)
library(rlang)
mtcars %>%
group_by(am, vs) %>%
summarise(mean_mpg = mean(mpg),
median_mpg = median(mpg),
count = n())
, aber dieses Beispiel zu erweitern, sagen ich für am
und vs
zur Gruppe wollte; dann am
und gear
; dann am
und carb
. Intuitiv scheint dies etwas zu sein, das map
behandeln sollte.
group_vars <- c("vs", "gear", "carb")
group_syms <- rlang::syms(group_vars)
sym_am <- rlang::sym("am")
mtcars %>%
map_df(~group_by(!!sym_am, !!!group_syms) %>%
summarise(mean_mpg = mean(mpg),
summarise(median_mpg = median(mpg),
summarise(count = n())
)
#Error in !sym_am : invalid argument type
Danke - sehr elegant! Kann ich fragen, warum die 'liste (sym_am)' benötigt wird? Ich bekomme "Fehler:' .x' ist kein Vektor (Symbol) "wenn ich weglasse, aber ich dachte ich hätte es schon als Symbol aufgerufen? –
@PeterMacPherson Verwenden Sie entweder 'c (sym_am)' oder 'list (sym_am)' legen Sie es in eine 'liste' und dann wird es speziell für' map' recycelt. Die 'base R' Map sollte ohne sie funktionieren – akrun