Dplyr বার্তাটি কীভাবে ব্যাখ্যা করবেন `সংক্ষিপ্ত বিবরণ () '' x 'দ্বারা আউটপুট পুনরায় গ্রুপ করা (g .groups` যুক্তি দিয়ে ওভাররাইড)?


94

গ্রুপ_বি চালানোর সময় আমি একটি নতুন বার্তা (পোস্টের শিরোনাম দেখুন) পেতে শুরু করেছিলাম এবং পিপিএলআর ডেভলপমেন্ট সংস্করণ 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যুক্তি দিয়ে ওভাররাইড )

এটি কীভাবে ব্যাখ্যা করা উচিত? যখন আমি বছর এবং সপ্তাহ উভয়কেই গ্রুপ করেছিলাম তখন কেন এটি কেবল 'বছর' দ্বারা পুনরায় গ্রুপিংয়ের প্রতিবেদন করে? এছাড়াও, ওভাররাইড করার অর্থ কী এবং আমি কেন এটি করতে চাই?

আমি মনে করি না যে বার্তাটি কোনও সমস্যার ইঙ্গিত দেয় কারণ এটি ডাইপ্লায়ার ভিগনেট জুড়ে আসে: https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

আমি বিশ্বাস করি এটি একটি নতুন বার্তা কারণ এটি কেবলমাত্র অতি সাম্প্রতিক এসও প্রশ্নগুলিতে প্রকাশ পেয়েছে যেমন ডাইপ্লাইার ব্যবহার করে পেয়ারলাইজ.উইলকক্স.স্টেস্ট আউটপুট কীভাবে গলে যাবে? এবং একাধিক কলামের উপরে আরগ্রেগেট (যার মধ্যে কোনটিই পুনঃনির্মাণ / ওভাররাইড বার্তাকে সম্বোধন করে)।

ধন্যবাদ!


অনুগ্রহযোগ্য উদাহরণ তৈরি করুন। কোন প্যাকেজটি convert()এসেছে?
ডাগ হিজারম্যান

এটা হাবলার থেকে। এতে যোগ করা হচ্ছে
সুসি ডার্কিনস

উত্তর:


114

এটি কেবল একটি বন্ধুত্বপূর্ণ সতর্কতা বার্তা। ডিফল্টরূপে, এর আগে যদি কোনও গ্রুপিং থাকে তবে 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"

.গ্রুপস - ফলাফলের গোষ্ঠীকরণ কাঠামো।

"ড্রপ_লাস্ট": গ্রুপিংয়ের শেষ স্তরটি বাদ দেওয়া। সংস্করণ 1.0.0 এর আগে এটি ছিল একমাত্র সমর্থিত বিকল্প।

"ড্রপ": গ্রুপিংয়ের সমস্ত স্তর বাদ পড়েছে।

"রাখুন": .ডাটা হিসাবে একই গ্রুপিং কাঠামো।

"সারিবদ্ধ": প্রতিটি সারি এটির নিজস্ব গ্রুপ।

যখন। গোষ্ঠীগুলি নির্দিষ্ট না করা হয় আপনি সমস্ত ফলাফলের আকার 1 হলে আপনি "ড্রপ_লাস্ট" পাবেন, বা আকার পরিবর্তিত হলে "রাখুন" পাবেন। তদ্ব্যতীত, "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কোনও গ্রুপিং নেই এবং ধরে নেওয়া যায় যে অপ্রত্যাশিত ফলাফলের ফলাফল হয় results এখন, সতর্কতা ব্যবহারকারীকে একটি ইঙ্গিত দেয় যে আমাদের সতর্কতা অবলম্বন করা উচিত যাতে একটি গ্রুপিং বৈশিষ্ট্য রয়েছে

দ্রষ্টব্য: এই .groupsমুহূর্তে experimentalএটির জীবনচক্র রয়েছে। সুতরাং, আচরণটি ভবিষ্যতের প্রকাশগুলিতে পরিবর্তন করা যেতে পারে

একই গ্রুপিং ভেরিয়েবলের (বা প্রয়োজন নেই) উপর ভিত্তি করে আমাদের ডেটার কোনও রূপান্তর প্রয়োজন কিনা তার উপর নির্ভর করে আমরা এর মধ্যে বিভিন্ন বিকল্প নির্বাচন করতে পারি .groups


11
পাশাপাশি কী দরকারী হবে তা ব্যাখ্যা করার জন্য কেন এই গ্রুপিং বৈশিষ্ট্যটি মোটেও গুরুত্বপূর্ণ, কারণ এটি সুস্পষ্ট নয়।
জাঙ্গোরেকী

6
এর অর্থ কি এই যে আপনি যদি .groups = 'ড্রপ' ব্যবহার করেন তবে কেস_ওয়েন বা সারিস্মসের মতো নির্দিষ্ট কিছু ফাংশন চালানোর আগে আপনাকে ইউগ্রুপ () ব্যবহার করতে হবে না?
সুসি ডার্কিনস

7
@ সুসিডারকিনস আপনি যদি ব্যবহার করে থাকেন summariseএবং এর সাথে groups = 'drop', তবে গ্রুপ বৈশিষ্ট্যগুলি নেই, তাই আপনার প্রয়োজন নেই ungroup(কমপক্ষে বর্তমান দৃশ্যে এই আচরণটি পরিপাটি না করা অবধি)
আকরুন

4
গ্রুপিং আচরণ বিশ্বব্যাপী কীভাবে সেট করবেন সে সম্পর্কে কোনও পরামর্শ যাতে অতিরিক্ত বার্তা এড়াতে আমাকে আমার স্ক্রিপ্টগুলিতে ম্যানুয়ালি প্রবেশ করতে না হয়?
মাইক লরেন্স

36
উহু! বার্তাটি নিঃশব্দ করতে (পুরানো "ড্রপ_লাস্ট" ডিফল্ট রেখে), বিকল্পগুলি করুন (dplyr.summarise.inform = এফ)
মাইক লরেন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.