Saya mulai mendapatkan pesan baru (lihat judul posting) ketika menjalankan group_by dan meringkas () setelah memperbarui ke versi pengembangan dplyr 0.8.99.9003.
Berikut adalah contoh untuk membuat ulang output:
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))
Tibble keluaran benar, tetapi pesan ini muncul:
summarise()
pengelompokan ulang keluaran dengan 'tahun' (timpa dengan.groups
argumen)
Bagaimana ini harus ditafsirkan? Mengapa laporan pengelompokan ulang hanya berdasarkan 'tahun' ketika saya dikelompokkan berdasarkan tahun dan minggu? Selain itu, apa artinya menimpa dan mengapa saya ingin melakukannya?
Saya rasa pesan tersebut tidak menunjukkan masalah karena muncul di seluruh sketsa dplyr: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html
Saya percaya ini adalah pesan baru karena hanya muncul pada pertanyaan SO terbaru seperti Bagaimana cara mencairkan keluaran pairwise.wilcox.test menggunakan dplyr? dan R Mengagregasi di beberapa kolom (tidak ada yang membahas pesan pengelompokan ulang / penggantian).
Terima kasih!
convert()
dari?Jawaban:
Itu hanya pesan peringatan yang ramah. Secara default, jika ada pengelompokan sebelum
summarise
, itu menjatuhkan satu variabel grup yaitu yang terakhir ditentukan digroup_by
. Jika hanya ada satu variabel pengelompokan, tidak akan ada atribut pengelompokan setelahsummarise
dan jika ada lebih dari satu yaitu di sini ada dua, jadi atribut untuk pengelompokan dikurangi menjadi 1 yaitu data akan memiliki 'tahun' sebagai atribut pengelompokan. Sebagai contoh yang dapat direproduksilibrary(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.
Pesannya adalah bahwa itu adalah
ungroup
ketika ada satugroup_by
, itu menjatuhkan pengelompokan itu setelahsummarise
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.
Di sini, itu menghilangkan pengelompokan terakhir dan berkumpul kembali dengan 'am'
Jika kita memeriksa
?summarise
, ada.groups
argumen yang secara default adalah"drop_last"
dan pilihan lain"drop"
,"keep"
,"rowwise"
yaitu jika kita mengubah
.groups
insummarise
, kita tidak mendapatkan pesan karena atribut grup dihapusmtcars %>% 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
Sebelumnya, peringatan ini tidak dikeluarkan dan dapat mengarah pada situasi di mana OP melakukan
mutate
atau hal lain dengan asumsi tidak ada pengelompokan dan menghasilkan output yang tidak diharapkan. Sekarang, peringatan memberikan indikasi kepada pengguna bahwa kita harus berhati-hati bahwa ada atribut pengelompokanCATATAN: Saat
.groups
iniexperimental
dalam siklus hidupnya. Jadi, perilaku tersebut dapat dimodifikasi di rilis mendatangBergantung pada apakah kita memerlukan transformasi data berdasarkan variabel pengelompokan yang sama (atau tidak diperlukan), kita dapat memilih opsi yang berbeda di
.groups
.sumber
summarise
, dan dengangroups = 'drop'
, maka atribut grup tidak ada, jadi Anda tidak perluungroup
(setidaknya dalam skenario saat ini sampai perilaku ini diubah secara tidyverse)