Beim Ausführen von group_by und summary () nach dem Update auf die dplyr-Entwicklungsversion 0.8.99.9003 wurde eine neue Nachricht angezeigt (siehe Beitragstitel).
Hier ist ein Beispiel, um die Ausgabe neu zu erstellen:
library(tidyverse)
library(hablar)
df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males
2018,10,1,1,1,1
2018,10,1,1,1,1
2018,11,2,2,2,2
2018,11,2,2,2,2
2019,10,3,3,3,3
2019,10,3,3,3,3
2019,11,4,4,4,4
2019,11,4,4,4,4") %>%
convert(chr(year,week)) %>%
mutate(total_rodents = rowSums(select_if(., is.numeric))) %>%
convert(num(year,week)) %>%
group_by(year,week) %>% summarise(average = mean(total_rodents))
Das Ausgabetibble ist korrekt, aber diese Meldung wird angezeigt:
summarise()
Umgruppierung der Ausgabe nach 'Jahr' (mit.groups
Argument überschreiben )
Wie ist das zu interpretieren? Warum wird eine Umgruppierung nur nach "Jahr" gemeldet, wenn ich nach Jahr und Woche gruppiert habe? Was bedeutet es auch zu überschreiben und warum sollte ich das tun wollen?
Ich glaube nicht, dass die Nachricht auf ein Problem hinweist, da sie in der gesamten dplyr-Vignette angezeigt wird: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html
Ich glaube, es ist eine neue Nachricht, da sie nur bei sehr aktuellen SO-Fragen wie " Wie wird die Ausgabe paarweise geschmolzen? Wilcox.test mit dplyr?" und R Aggregieren über mehrere Spalten (von denen keine die Umgruppierungs- / Überschreibungsnachricht adressiert).
Vielen Dank!
convert()
?Antworten:
Es ist nur eine freundliche Warnmeldung. Wenn vor dem eine Gruppierung vorhanden ist, wird standardmäßig
summarise
eine Gruppenvariable gelöscht, dh die zuletzt in dergroup_by
. Wenn es nur eine Gruppierungsvariable gibt, gibt es kein Gruppierungsattribut nach demsummarise
und wenn es mehr als ein gibt, dh hier sind es zwei, wird das Attribut für die Gruppierung auf 1 reduziert, dh die Daten hätten das 'Jahr' als Gruppierungsattribut. Als reproduzierbares Beispiellibrary(dplyr) mtcars %>% group_by(am) %>% summarise(mpg = sum(mpg)) #`summarise()` ungrouping output (override with `.groups` argument) # A tibble: 2 x 2 # am mpg #* <dbl> <dbl> #1 0 326. #2 1 317.
Die Nachricht ist, dass es ist,
ungroup
dh wenn es eine einzelne gibtgroup_by
, wird diese Gruppierung nach dem gelöschtsummarise
mtcars %>% group_by(am, vs) %>% summarise(mpg = sum(mpg)) #`summarise()` regrouping output by 'am' (override with `.groups` argument) # A tibble: 4 x 3 # Groups: am [2] # am vs mpg # <dbl> <dbl> <dbl> #1 0 0 181. #2 0 1 145. #3 1 0 118. #4 1 1 199.
Hier wird die letzte Gruppierung gelöscht und mit dem 'am' neu gruppiert.
Wenn wir das überprüfen
?summarise
, gibt es.groups
Argument , das standardmäßig ist"drop_last"
und die anderen Optionen sind"drop"
,"keep"
,"rowwise"
das heißt , wenn wir die Änderung
.groups
insummarise
, bekommen wir nicht die Nachricht , da die Gruppenattribute entfernt werdenmtcars %>% group_by(am) %>% summarise(mpg = sum(mpg), .groups = 'drop') # A tibble: 2 x 2 # am mpg #* <dbl> <dbl> #1 0 326. #2 1 317. mtcars %>% group_by(am, vs) %>% summarise(mpg = sum(mpg), .groups = 'drop') # A tibble: 4 x 3 # am vs mpg #* <dbl> <dbl> <dbl> #1 0 0 181. #2 0 1 145. #3 1 0 118. #4 1 1 199. mtcars %>% group_by(am, vs) %>% summarise(mpg = sum(mpg), .groups = 'drop') %>% str #tibble [4 × 3] (S3: tbl_df/tbl/data.frame) # $ am : num [1:4] 0 0 1 1 # $ vs : num [1:4] 0 1 0 1 # $ mpg: num [1:4] 181 145 118 199
Bisher wurde diese Warnung nicht ausgegeben und kann zu Situationen führen, in denen das OP eine
mutate
oder eine andere Aktion ausführt, sofern keine Gruppierung vorliegt und eine unerwartete Ausgabe erfolgt. Die Warnung gibt dem Benutzer nun einen Hinweis darauf, dass wir darauf achten sollten, dass ein Gruppierungsattribut vorhanden istHINWEIS: Der Moment
.groups
befindet sichexperimental
in seinem Lebenszyklus. Daher könnte das Verhalten in zukünftigen Versionen geändert werdenAbhängig davon, ob wir eine Transformation der Daten basierend auf derselben Gruppierungsvariablen benötigen (oder nicht), können wir die verschiedenen Optionen in auswählen
.groups
.quelle
summarise
und mit verwendengroups = 'drop'
, sind die Gruppenattribute nicht vorhanden, sodass Sie dies nicht tun müssenungroup
(zumindest im aktuellen Szenario, bis dieses Verhalten in tidyverse geändert wird)