"Summarize ()" çıktıyı "x" ile yeniden gruplayarak (".groups" argümanını geçersiz kılın) dplyr mesajı nasıl yorumlanır?


94

Group_by çalıştırırken yeni bir mesaj almaya başladım (gönderi başlığına bakın) ve dplyr geliştirme sürümü 0.8.99.9003'e güncelledikten sonra özet ().

Çıktıyı yeniden oluşturmak için bir örnek:

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))

Çıktı işareti doğrudur, ancak şu mesaj görüntülenir:

summarise()çıktı 'yıl'a göre yeniden gruplanıyor ( .groupsbağımsız değişkenle geçersiz kıl)

Bu nasıl yorumlanmalı? Hem yıla hem de haftaya göre gruplandırdığımda neden yeniden gruplamayı yalnızca 'yıla' göre rapor ediyor? Ayrıca, geçersiz kılmak ne anlama geliyor ve neden bunu yapmak isteyeyim?

Mesajın bir sorunu gösterdiğini sanmıyorum çünkü dplyr vinyetinde görünüyor: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

Bunun yeni bir mesaj olduğuna inanıyorum çünkü sadece dplyr kullanarak pairwise.wilcox.test çıktısı nasıl eritilir? ve R Birden çok sütun üzerinde topla (hiçbiri yeniden gruplama / geçersiz kılma mesajına değinmez).

Teşekkür ederim!


Lütfen tekrarlanabilir örnekler yapın. Hangi paket convert()nereden?
Dağ Hjermann

Hablar'dan. Ekleniyor.
Susie Derkins

Yanıtlar:


114

Bu sadece dostça bir uyarı mesajıdır. Varsayılan olarak, öğesinden önce herhangi bir gruplama varsa summarise, bir grup değişkenini, yani group_by. Yalnızca bir gruplama değişkeni varsa, sonrasında herhangi bir gruplama özelliği olmayacaktır summariseve birden fazla varsa, yani burada ikidir, bu nedenle, gruplama özniteliği 1'e düşürülür, yani veriler 'yıl' olacaktır. gruplama özelliği olarak. Tekrarlanabilir bir örnek olarak

library(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.

Mesaj şu ki ungroup, yani bir single olduğunda group_by, o gruplamayı bırakıyor.summarise

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.

Burada, son gruplamayı bırakır ve 'am' ile yeniden gruplanır

Biz işaretlerseniz ?summarise, orada .groupsvarsayılan olarak argüman "drop_last"ve diğer seçenekler "drop", "keep","rowwise"

.groups - Sonucun gruplama yapısı.

"drop_last": son gruplama düzeyini düşürme. Bu, 1.0.0 sürümünden önce desteklenen tek seçenekti.

"drop": Tüm gruplama seviyeleri atılır.

"keep": .data ile aynı gruplama yapısı.

"Rowwise": Her satır kendi grubudur.

.Groups belirtilmediğinde, ya tüm sonuçlar boyut 1 olduğunda "drop_last" veya boyut değişiyorsa "tut" alırsınız. Ek olarak, "dplyr.summarise.inform" seçeneği FALSE olarak ayarlanmadıkça, bir mesaj sizi bu seçim konusunda bilgilendirir.

yani, .groupsgirişi değiştirirsek, summarisemesajı alamayız çünkü grup özellikleri kaldırılır

mtcars %>% 
    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

Önceden, bu uyarı yayınlanmıyordu ve OP'nin herhangi bir mutategruplama olmadığını varsayarak bir veya başka bir şey yaptığı durumlara yol açabilir ve beklenmedik çıktılarla sonuçlanabilir. Şimdi uyarı, kullanıcıya bir gruplama özelliği olduğuna dikkat etmemiz gerektiğine dair bir gösterge veriyor

NOT: Şu .groupsan experimentalyaşam döngüsündedir. Dolayısıyla, davranış gelecekteki sürümlerde değiştirilebilir.

Aynı gruplama değişkenine (veya gerekmediğine) dayalı olarak herhangi bir veri dönüşümüne ihtiyacımız olup olmadığına bağlı olarak, içinde farklı seçenekleri seçebiliriz .groups.


11
Yararlı olan şey, bu gruplama özelliğinin neden önemli olduğunu açıklamaktır, çünkü bu açık değildir.
jangorecki

6
Bu, .groups = 'drop' kullanırsanız, case_when veya rowSums gibi belirli diğer işlevleri çalıştırmadan önce ungroup () kullanmanıza gerek olmadığı anlamına mı geliyor?
Susie Derkins

7
@SusieDerkins Eğer kullanıyorsanız summariseve ile groups = 'drop', o zaman grup öznitelikleri orada değil, bu yüzden yapmanıza gerek yok ungroup(en azından mevcut senaryoda bu davranış düzenli olarak değişene kadar)
akrun

1
Gruplama davranışını global olarak nasıl ayarlayacağıma dair herhangi bir tavsiye var mı, böylece fazladan mesajlardan kaçınmak için komut dosyalarıma manuel olarak girmek zorunda kalmam?
Mike Lawrence

37
Oh! mesajı susturmak için (eski "drop_last" varsayılanını koruyarak), seçenekleri yapın (dplyr.summarise.inform = F)
Mike Lawrence
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.