आर सेलेक्ट(), फ़िल्टर(), अरेंज(), पाइपलाइन उदाहरण के साथ

⚡ स्मार्ट सारांश

R में Select, Filter और Arrange तीन dplyr क्रियाएं हैं जो डेटा फ्रेम को आवश्यक कॉलम, पंक्तियों और क्रम में कम कर देती हैं। यह उदाहरण 205 पंक्तियों वाले यात्रा समय डेटासेट पर पाइप ऑपरेटर के साथ इनका संयोजन करके दिखाता है।

  • ???? स्तंभ चयन: select(df, A, B) नाम वाले कॉलम रखता है, select(df, A:C) एक रेंज रखता है, और select(df, -C) एक कॉलम हटा देता है।
  • 🔎 पंक्ति फ़िल्टरिंग: filter(df, condition) मेल खाने वाली पंक्तियों को रखता है, और शर्तें AND के लिए एम्परसैंड या OR के लिए वर्टिकल बार के साथ संयोजित होती हैं।
  • 🔣 छँटाई: arrange() फ़ंक्शन डिफ़ॉल्ट रूप से पंक्तियों को आरोही क्रम में व्यवस्थित करता है, और desc() किसी भी एक कॉलम को उलट देता है।
  • 🔗 पाइप Operaटोर: %>% ऑपरेटर प्रत्येक परिणाम को सीधे अगले क्रियापद में पारित करता है, इसलिए कोई मध्यवर्ती वस्तु वातावरण को अव्यवस्थित नहीं करती है।
  • 🧹 सहायक फ़ंक्शन: starts_with(), contains() और where() कॉलम को नाम के बजाय पैटर्न या प्रकार के आधार पर चुनते हैं।
  • 📐 क्रिया का क्रम महत्वपूर्ण है: डेटा को छोटा करने के लिए पहले ही फ़िल्टर करें, फिर चयन करें, फिर व्यवस्थित करें, जिससे बाद के सभी चरण सस्ते रहते हैं।

R फ़िल्टर चुनें पाइपलाइन व्यवस्थित करें

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

अक्सर पूछे जाने वाले प्रश्न

magrittr %>% पाइप dplyr के साथ आता है और डॉट के साथ प्लेसहोल्डर सिंटैक्स का समर्थन करता है। नेटिव |> पाइप R 4.1 में आया और इसके लिए किसी पैकेज की आवश्यकता नहीं है। दोनों ही बाईं ओर के परिणाम को दाईं ओर के पहले आर्गुमेंट में पास करते हैं।

नहीं। प्रत्येक dplyr क्रिया एक नया डेटा फ्रेम लौटाती है और इनपुट को अपरिवर्तित छोड़ देती है। परिवर्तन को स्थायी बनाने के लिए आपको परिणाम को किसी ऑब्जेक्ट को असाइन करना होगा, या उसे आगे पाइप करना होगा।

NA से तुलना करने पर TRUE के बजाय NA प्राप्त होता है, और filter() केवल TRUE वाली पंक्तियों को ही रखता है। जानबूझकर लुप्त मानों का चयन करने के लिए is.na() का उपयोग करें, या उन्हें हटाने के लिए tidyr से drop_na() का उपयोग करें।

एआई मॉडल के लिए फ़ीचर इंजीनियरिंग में मुख्य रूप से पंक्तियों को फ़िल्टर करना, स्तंभों का चयन करना और सॉर्ट करना शामिल है। dplyr इन चरणों को पठनीय पाइपलाइन के रूप में व्यक्त करता है, जिसकी समीक्षाकर्ता ऑडिट कर सकते हैं, जो तब महत्वपूर्ण होता है जब प्रशिक्षण डेटासेट को पुनरुत्पादित किया जा सके।

जी हां। एआई सहायक ब्रैकेट सबसेटिंग को select() और filter() कॉल में अनुवाद कर सकते हैं और पाइप की व्याख्या कर सकते हैं। हमेशा दोनों संस्करणों को चलाएं और आयामों की तुलना करें, क्योंकि बेस आर और dplyr लुप्त मानों को अलग-अलग तरीके से संभालते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: