आर सेलेक्ट(), फ़िल्टर(), अरेंज(), पाइपलाइन उदाहरण के साथ
⚡ स्मार्ट सारांश
R में Select, Filter और Arrange तीन dplyr क्रियाएं हैं जो डेटा फ्रेम को आवश्यक कॉलम, पंक्तियों और क्रम में कम कर देती हैं। यह उदाहरण 205 पंक्तियों वाले यात्रा समय डेटासेट पर पाइप ऑपरेटर के साथ इनका संयोजन करके दिखाता है।
R में dplyr क्या है?
दुत्कार यह टाइडीवर्स का डेटा मैनिपुलेशन पैकेज है। यह बेस के ब्रैकेट नोटेशन को प्रतिस्थापित करता है। R कुछ चुनिंदा क्रियाओं के साथ, जिनमें से प्रत्येक का नाम उसके द्वारा किए जाने वाले कार्य के नाम पर रखा गया है और प्रत्येक क्रिया डेटा फ्रेम को अपने पहले तर्क के रूप में लेती है। यह सुसंगत संरचना ही क्रियाओं को आपस में जोड़ने की अनुमति देती है।
| क्रिया | पर कार्य करता है | यह क्या करता है |
|---|---|---|
| चुनते हैं() | स्तंभ | चरों को रखता है या हटाता है |
| फिल्टर () | पंक्तियाँ | किसी शर्त से मेल खाने वाली पंक्तियों को रखता है |
| व्यवस्था () | पंक्तियाँ | एक या अधिक स्तंभों के आधार पर पंक्तियों का क्रम बदलता है |
| उत्परिवर्तित () | स्तंभ | एक वेरिएबल बनाता या संशोधित करता है |
| सारांशित करें() | पूरी मेज | कई पंक्तियों को एक ही आंकड़े में समेट देता है |
| द्वारा समूह बनाएं() | पूरी मेज | डेटा को विभाजित करता है ताकि बाद में क्रियाएँ प्रत्येक समूह के अनुसार चलें |
इस ट्यूटोरियल में पहले तीन क्रियाओं के साथ-साथ पाइप क्रिया का भी वर्णन किया गया है। एग्रीगेट फ़ंक्शन ट्यूटोरियल यह प्रोग्राम group_by() और summarise() फंक्शन्स को विस्तार से समझाता है।
इस ट्यूटोरियल में प्रयुक्त डेटासेट
dplyr नामक लाइब्रेरी में डेटासेट के अंदर नेविगेट करने के लिए उपयोगी क्रियाएँ मौजूद हैं। इस ट्यूटोरियल के माध्यम से, आप ट्रैवल टाइम्स डेटासेट का उपयोग करेंगे। यह डेटासेट ड्राइवर द्वारा घर और कार्यस्थल के बीच की गई यात्राओं को रिकॉर्ड करता है। डेटासेट में चौदह चर हैं, जिनमें शामिल हैं:
- सप्ताह का दिन: सप्ताह के उस दिन की पहचान करें जिस दिन ड्राइवर अपनी कार का उपयोग करता है
- दूरी: यात्रा की कुल दूरी
- अधिकतम गति: यात्रा की अधिकतम गति
- कुल समय: यात्रा की लंबाई मिनटों में
इस डेटासेट में 205 अवलोकन हैं, और यात्राएँ निम्नलिखित समयावधि से हुई हैं: Monday शुक्रवार को।
सबसे पहले, आपको यह करना होगा:
- डेटासेट लोड करें
- डेटा की संरचना की जाँच करें.
dplyr का एक उपयोगी फ़ंक्शन glimpse() है। यह R के मूल str() फ़ंक्शन की तरह ही काम करता है, लेकिन प्रत्येक वेरिएबल के लिए एक पंक्ति प्रिंट करता है जिसमें उसका प्रकार और पहले कुछ मान होते हैं, जिससे बड़े डेटासेट पर स्कैन करना कहीं अधिक आसान हो जाता है।
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
आउटपुट:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
Comments वेरिएबल पर स्पष्ट रूप से गहन ध्यान देने की आवश्यकता है: शुरुआती सभी अवलोकन खाली हैं।
sum(df$Comments =="")
Code व्याख्या
- sum(df$Comments == “”): df के Comments कॉलम में खाली स्ट्रिंग के बराबर वाले प्रेक्षणों की गणना करें।
आउटपुट:
## [1] 181
डेटा लोड हो जाने के बाद, कॉलम को ट्रिम करने वाले वर्ब से शुरुआत करें।
चुनते हैं()
हम select() क्रिया से शुरू करेंगे। हमें सभी चरों की आवश्यकता नहीं है, और एक अच्छा अभ्यास केवल उन चरों का चयन करना है जो आपको प्रासंगिक लगते हैं।
हमारे पास 181 अवलोकन गायब हैं, जो डेटासेट का लगभग 90 प्रतिशत है। यदि आप उन्हें बाहर करने का निर्णय लेते हैं, तो आप विश्लेषण जारी नहीं रख पाएंगे।
दूसरी संभावना यह है कि select() क्रिया के साथ Comment चर को हटा दिया जाए।
हम select() के साथ अलग-अलग तरीकों से वेरिएबल्स का चयन कर सकते हैं। ध्यान दें कि, पहला तर्क डेटासेट है।
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset. - `select(df, A:C)`: Select all variables from A to C from df dataset. - `select(df, -C)`: Exclude C from the dataset from df dataset.
आप Comments चर को बाहर करने के लिए तीसरे तरीके का उपयोग कर सकते हैं।
step_1_df <- select(df, -Comments) dim(df)
आउटपुट:
## [1] 205 14
dim(step_1_df)
आउटपुट:
## [1] 205 13
मूल डेटासेट में 14 विशेषताएं हैं जबकि step_1_df में 13 हैं।
R में select() सहायक फ़ंक्शन
एक डेटासेट में दर्जनों वैरिएबल होने पर प्रत्येक कॉलम का नामकरण करना अव्यावहारिक हो जाता है। dplyr में ऐसे सहायक उपकरण मौजूद हैं जो पैटर्न या प्रकार के आधार पर कॉलम का चयन करते हैं।
| सहायक | उन कॉलमों का चयन करता है जो | उदाहरण |
|---|---|---|
| इसके साथ आरंभ होता है() | एक धागे से शुरू करें | select(df, starts_with(“Avg”)) |
| इसी के साथ समाप्त होता है() | अंत में एक स्ट्रिंग लगाएं | select(df, ends_with(“Time”)) |
| रोकना() | स्ट्रिंग कहीं भी हो सकती है | select(df, contains(“Speed”)) |
| मिलान() | एक नियमित अभिव्यक्ति का मिलान करें | select(df, matches(“^Max|^Avg”)) |
| कहाँ() | टाइप टेस्ट को संतुष्ट करें | select(df, where(is.numeric)) |
| सब कुछ() | अभी तक नाम तय नहीं हुए हैं | select(df, TotalTime, everything()) |
# Keep only the timing columns df %>% select(ends_with("Time")) # Keep every numeric column df %>% select(where(is.numeric)) # Move TotalTime to the front, keep the rest in place df %>% select(TotalTime, everything())
दो और क्रियाएं स्वाभाविक रूप से select() के साथ जोड़ी बनाती हैं। कॉलम को ड्रॉप किए बिना उसका नाम बदलने के लिए rename(new_name = old_name) का उपयोग करें।ping अन्य कॉलमों को सूचीबद्ध किए बिना स्थानांतरित करने के लिए relocate() का उपयोग करें।
फिल्टर ()
filter() फ़ंक्शन किसी शर्त को पूरा करने वाले प्रेक्षणों को रखता है। filter() ठीक select() की तरह काम करता है, आप पहले डेटा फ़्रेम पास करते हैं और फिर अल्पविराम से अलग की गई शर्त पास करते हैं।
filter(df, condition)
arguments:
- df: dataset used to filter the data
- condition: Condition used to filter the data
एक मापदंड
सबसे पहले, आप किसी कारक चर के प्रत्येक स्तर के भीतर प्रेक्षणों की संख्या गिन सकते हैं।
table(step_1_df$GoingTo)
Code व्याख्या
- table(): प्रति स्तर प्रेक्षणों की संख्या गिनें। यह एक फैक्टर या कैरेक्टर वेरिएबल की अपेक्षा करता है।
- table(step_1_df$GoingTo): प्रत्येक गंतव्य की ओर यात्राओं की संख्या गिनें
आउटपुट:
## ## GSK Home ## 105 100
फ़ंक्शन टेबल() यह इंगित करता है कि 105 सवारी GSK और 100 होम जा रही हैं।
हम डेटा को फ़िल्टर करके एक डेटासेट को 105 अवलोकनों के साथ तथा दूसरे को 100 अवलोकनों के साथ लौटा सकते हैं।
# Select observations where GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
आउटपुट:
## [1] 100 14
# Select observations where GoingTo == GSK (work) select_work <- filter(df, GoingTo == "GSK") dim(select_work)
आउटपुट:
## [1] 105 14
एकाधिक मानदंड
हम एक से अधिक मानदंडों के आधार पर डेटासेट को फ़िल्टर कर सकते हैं। उदाहरण के लिए, आप एक से अधिक मानदंडों का उपयोग करके डेटासेट को फ़िल्टर कर सकते हैं।tracउन अवलोकनों को शामिल करें जहां गंतव्य घर है और यात्रा बुधवार को हुई थी।
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
आउटपुट:
## [1] 23 14
23 अवलोकन इस मानदंड से मेल खाते थे।
सामान्य फ़िल्टर() शर्तें और Operaआर में टोर
filter() फ़ंक्शन उन सभी पंक्तियों को रखता है जिनके लिए शर्त TRUE होती है। NA मान वाली पंक्तियों को हटा दिया जाता है, यही व्यवहार अधिकांश शुरुआती लोगों को आश्चर्यचकित करता है।
| Operaटो | अर्थ | उदाहरण |
|---|---|---|
| == | के बराबर | फ़िल्टर(df, गोइंगटू == “होम”) |
| != | बराबर नही है | फ़िल्टर(df, सप्ताह का दिन != “Monday") |
| & | और, दोनों को धारण करना होगा | फ़िल्टर(df, दूरी > 50 और अधिकतम गति > 130) |
| | | या, दोनों में से कोई भी धारण कर सकता है | फ़िल्टर(df, सप्ताह का दिन == “Monday” | सप्ताह का दिन == “शुक्रवार”) |
| %में% | किसी वेक्टर में किसी भी मान से मेल खाता है | फ़िल्टर(df, सप्ताह का दिन %in% c(“Monday", "शुक्रवार")) |
| के बीच() | एक संख्यात्मक सीमा के भीतर आता है | फ़िल्टर(df, बीच(दूरी, 48, 52)) |
| is.na() | क्या कोई मान लुप्त है? | फ़िल्टर(df, is.na(ईंधन अर्थव्यवस्था)) |
तीन आदतें अधिकांश filter() त्रुटियों को रोकती हैं।
- चेन्ड OR के बजाय %in% का प्रयोग करें। फ़िल्टर(df, सप्ताह का दिन %in% c(“Monday”, “शुक्रवार”)) दो == तुलनाओं की तुलना में छोटा है और इसमें टाइपिंग की गलती होने की संभावना कहीं अधिक है जो एक ऊर्ध्वाधर बार से जुड़ी होती हैं।
- किसी भी लुप्त मान को जांचने के लिए कभी भी == का प्रयोग न करें। x == NA अभिव्यक्ति NA लौटाती है, TRUE नहीं, इसलिए पंक्ति को चुपचाप हटा दिया जाता है। इसके बजाय is.na(x) का उपयोग करें।
- अल्पविराम का अर्थ है 'और'। filter(df, a, b) और filter(df, a & b) एक ही प्रकार के हैं, यही कारण है कि इस ट्यूटोरियल में पहले दिया गया उदाहरण दोनों ही तरह से काम करता है।
पाइप Operadplyr में tor
डेटासेट के निर्माण के लिए बहुत सारे कार्यों की आवश्यकता होती है, जैसे:
- का आयात
- विलय
- का चयन
- छानने
- इत्यादि
dplyr लाइब्रेरी एक व्यावहारिक ऑपरेटर, %>%, के साथ आती है, जिसे कहा जाता है पाइपइससे डेटा का हेरफेर अधिक स्वच्छ, तेज और त्रुटियों की संभावना कम हो जाती है।
यह ऑपरेटर एक कोड है जो मध्यवर्ती चरणों को हार्ड ड्राइव पर सहेजे बिना चरणों को निष्पादित करता है। यदि आप ऊपर से हमारे उदाहरण पर वापस आते हैं, तो आप रुचि के चर का चयन कर सकते हैं और उन्हें फ़िल्टर कर सकते हैं। हमारे पास तीन चरण हैं:
- चरण 1: डेटा आयात करें: जीपीएस डेटा आयात करें
- चरण 2: डेटा चुनें: GoingTo और DayOfWeek चुनें
- चरण 3: डेटा फ़िल्टर करें: केवल होम और बुधवार को ही लौटें
हम इसे करने के लिए कठिन रास्ता अपना सकते हैं:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
आउटपुट:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
कई ऑपरेशनों को एक साथ जोड़ने का यह सुविधाजनक तरीका नहीं है। प्रत्येक मध्यवर्ती परिणाम वातावरण में ही रहता है, और नाम जल्दी ही अर्थहीन हो जाते हैं।
इसके बजाय पाइप ऑपरेटर %>% का उपयोग करें। आप डेटा फ्रेम को शुरुआत में एक बार नाम देते हैं और हर चरण उसी से आगे बढ़ता है।
पाइपलाइन का मूल सिंटैक्स
New_df <- df %>% step 1 %>% step 2 %>% ... arguments - New_df: Name of the new data frame - df: Data frame used to compute the step - step: Instruction for each step - Note: the last instruction does not need a trailing `%>%`, because nothing follows it - Note: assigning the result to a new object is optional. Without it, the output prints in the console.
आप ऊपर बताए गए चरणों का पालन करके अपना पहला पाइप बना सकते हैं।
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) %>% #Step 2 select(GoingTo, DayOfWeek) %>% #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
आउटपुट:
## [1] TRUE
दोनों वस्तुएं एक जैसी हैं, इसलिए पाइप ने एक ही पठनीय कथन में बिल्कुल समान परिणाम दिया।
व्यवस्था ()
में पिछले ट्यूटोरियल, आप सीखते हैं कि फ़ंक्शन sort() के साथ मानों को कैसे सॉर्ट किया जाए। लाइब्रेरी dplyr में इसका सॉर्टिंग फ़ंक्शन है। यह पाइपलाइन के साथ एक आकर्षण की तरह काम करता है। arrange() क्रिया एक या कई पंक्तियों को आरोही (डिफ़ॉल्ट) या अवरोही क्रम में पुनः व्यवस्थित कर सकती है।
- `arrange(A)`: Ascending sort of variable A - `arrange(A, B)`: Ascending sort of variable A and B - `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
हम दूरी को गंतव्य के अनुसार क्रमबद्ध कर सकते हैं।
# Sort by destination and distance step_2_df <- step_1_df %>% arrange(GoingTo, Distance) head(step_2_df)
आउटपुट:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed ## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4 ## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5 ## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7 ## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4 ## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7 ## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8 ## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All ## 1 78.4 8.45 45.7 37.0 No ## 2 89.0 8.28 35.6 32.6 Yes ## 3 87.3 7.89 38.5 33.3 Yes ## 4 77.8 8.45 41.6 37.6 No ## 5 93.2 7.81 34.3 31.5 Yes ## 6 78.8 8.54 40.4 37.3 No
R में dplyr क्रियाएँ: त्वरित संदर्भ
नीचे दी गई तालिका में इस ट्यूटोरियल में उपयोग की गई प्रत्येक क्रिया, उसके वाक्य संरचना और प्रत्येक कॉल द्वारा लौटाए जाने वाले मान की सूची दी गई है:
| क्रिया | उद्देश्य | Code | व्याख्या |
|---|---|---|---|
| झलक | df की संरचना की जाँच करें |
glimpse(df)
|
str() के समान उद्देश्य, पढ़ने में आसान |
| चुनते हैं() | चरों का चयन/बहिष्कार करें |
select(df, A, B ,C)
|
चर A, B और C का चयन करें |
select(df, A:C)
|
A से C तक सभी चर चुनें | ||
select(df, -C)
|
सी को बाहर करें | ||
| फिल्टर () | उन पंक्तियों को रखें जो एक या अधिक शर्तों से मेल खाती हों। |
filter(df, condition1)
|
एक शर्त |
filter(df, condition1 & condition2)
|
दो शर्तें AND के साथ संयुक्त | ||
| व्यवस्था () | डेटासेट को एक या अनेक चरों के साथ क्रमबद्ध करें |
arrange(A)
|
आरोही प्रकार का चर A |
arrange(A, B)
|
आरोही प्रकार के चर A और B | ||
arrange(desc(A), B)
|
चर A का अवरोही प्रकार और B का आरोही प्रकार | ||
| %>% | प्रत्येक चरण के बीच एक पाइपलाइन बनाएं |
step 1 %>% step 2 %>% step 3 |

