कैसे dplyr संदेश की व्याख्या करने के लिए `संक्षेप '()` एक्स' द्वारा उत्पादन फिर से इकट्ठा (। समूह / तर्क के साथ ओवरराइड)?


112

मुझे एक नया संदेश मिलना शुरू हुआ (पोस्ट का शीर्षक देखें) जब चल रहे समूह_बाय और संक्षेप () को dplyr विकास संस्करण 0.8.99.9003 पर अद्यतन करने के बाद।

यहाँ आउटपुट को फिर से बनाने के लिए एक उदाहरण दिया गया है:

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

आउटपुट टिबबल सही है, लेकिन यह संदेश प्रकट होता है:

summarise()आउटपुट को 'वर्ष' द्वारा ( .groupsतर्क के साथ ओवरराइड )

इसकी व्याख्या कैसे की जानी चाहिए? जब मैं वर्ष और सप्ताह दोनों द्वारा समूहीकृत होता हूं तो केवल 'वर्ष' द्वारा पुन: समूहित होने की रिपोर्ट क्यों करता है? इसके अलावा, ओवरराइड करने का क्या मतलब है और मैं ऐसा क्यों करना चाहता हूं?

मुझे नहीं लगता कि संदेश किसी समस्या को इंगित करता है क्योंकि यह संपूर्ण dignr vignette में प्रकट होता है: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

मेरा मानना ​​है कि यह एक नया संदेश है क्योंकि यह बहुत हाल ही में SO प्रश्नों पर दिखाई दिया है जैसे कि dplyr का उपयोग करके pairwise.wilcox.test आउटपुट को कैसे पिघलाएं? और आर कॉलम को कई कॉलमों पर अलग करें (जिनमें से कोई भी regrouping / ओवरराइड संदेश को संबोधित नहीं करता है)।

धन्यवाद!


कृपया प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाएं। किस पैकेज convert()से है?
दाग हर्मनमैन

यह हबलर से है।
इसमें जोड़ा

जवाबों:


136

यह सिर्फ एक अनुकूल चेतावनी संदेश है। डिफ़ॉल्ट रूप से, यदि कोई समूहन पहले होता है summarise, तो वह एक समूह चर छोड़ता है अर्थात अंतिम निर्दिष्ट होता है group_by। यदि केवल एक समूहीकरण चर है, तो उसके बाद कोई समूहीकरण विशेषता नहीं होगी summariseऔर यदि एक से अधिक हैं यानी यहाँ यह दो है, तो, समूहीकरण के लिए विशेषता 1 तक कम हो जाती है अर्थात डेटा 'वर्ष' होगा समूहीकरण विशेषता के रूप में। एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के रूप में

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.

संदेश यह है कि यह ungroupआईएनजी है जब एक एकल होता है group_by, तो यह उस समूह को छोड़ देता है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.

यहाँ, यह अंतिम समूहन को छोड़ता है और 'am' के साथ फिर से इकट्ठा होता है।

अगर हम जाँच ?summarise, वहाँ है .groupsतर्क जो डिफ़ॉल्ट रूप से है "drop_last"और अन्य विकल्प हैं "drop", "keep","rowwise"

.groups - परिणाम की समूहीकरण संरचना।

"drop_last": समूहीकरण के अंतिम स्तर को छोड़ना। यह संस्करण 1.0.0 से पहले एकमात्र समर्थित विकल्प था।

"ड्रॉप": समूहीकरण के सभी स्तर गिरा दिए जाते हैं।

"रखना": समान समूहन संरचना .data के रूप में।

"रोवाइज़": प्रत्येक पंक्ति यह अपना समूह है।

जब .groups निर्दिष्ट नहीं किया जाता है, तो आपको या तो "drop_last" मिलता है जब सभी परिणाम आकार 1 होते हैं, या यदि आकार भिन्न होता है तो "Keep"। इसके अलावा, एक संदेश आपको उस विकल्प के बारे में सूचित करता है, जब तक कि विकल्प "dplyr.summarise.inform" FALSE पर सेट नहीं हो जाता।

यदि हम इसमें बदलाव करते .groupsहैं summarise, तो हमें संदेश नहीं मिलता क्योंकि समूह के गुण हटा दिए जाते हैं

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

इससे पहले, यह चेतावनी जारी नहीं की गई थी और यह उन स्थितियों को जन्म दे सकती है जहां ओपी एक mutateया कुछ और करता है और कोई समूह नहीं होता है और अप्रत्याशित उत्पादन होता है। अब, चेतावनी उपयोगकर्ता को एक संकेत देती है कि हमें सावधान रहना चाहिए कि एक समूहीकरण विशेषता है

नोट: .groupsअभी यह experimentalअपने जीवनचक्र में है। इसलिए, भविष्य के रिलीज में व्यवहार को संशोधित किया जा सकता है

इस बात पर निर्भर करते हुए कि हमें एक ही समूह चर (या आवश्यकता नहीं) के आधार पर डेटा के किसी भी परिवर्तन की आवश्यकता है, हम अलग-अलग विकल्पों का चयन कर सकते हैं .groups


12
क्या उपयोगी होगा और यह भी बताया जाएगा कि यह समूहीकरण विशेषता क्यों मायने रखती है, क्योंकि यह स्पष्ट नहीं है।
जंगोरेकी

7
इसका मतलब यह है कि अगर आप .groups = 'drop' का उपयोग करते हैं तो आपको case_when या rowSums जैसे कुछ अन्य कार्यों को चलाने से पहले ungroup () का उपयोग करने की आवश्यकता नहीं है?
सूसी डर्किंस

8
@SusieDerkins यदि आप उपयोग कर रहे हैं summarise, और groups = 'drop'उसके साथ हैं , तो समूह विशेषताएँ नहीं हैं, इसलिए आपको ungroup(कम से कम वर्तमान परिदृश्य में तब तक की जरूरत नहीं है, जब तक कि यह व्यवहार ठीक से बदल न जाए)
akrun

49
ओह! संदेश को चुप करने के लिए (पुराने "ड्रॉप_ब्लास्ट" को डिफ़ॉल्ट रखते हुए), विकल्प करें (dplyr.summarise.inform = F)
माइक लॉरेंस

6
@ माइकलाइवेंस धन्यवाद! बस इतना ही चाहिए। यह थोड़ा अपमानजनक है कि पहले काम करने वाला कोड अचानक चेतावनी दे रहा है ( दोस्ताना चेतावनी जैसी कोई चीज नहीं होनी चाहिए )।
शराबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.