ए: ifelse() और if_else() के बीच अंतर
R आधार ifelse() फ़ंक्शन की तुलना में dplyr if_else () फ़ंक्शन के तीन फायदे हैं:
1. if_else() फ़ंक्शन जांच करता है कि if else स्टेटमेंट में दो विकल्पों का डेटा प्रकार समान है।
2. if_else() फ़ंक्शन दिनांक ऑब्जेक्ट को संख्यात्मक में परिवर्तित नहीं करता है।
3. if_else() फ़ंक्शन NA मानों को संभालने का तरीका निर्दिष्ट करने के लिए एक “अनुपलब्ध” तर्क प्रदान करता है।
निम्नलिखित उदाहरण व्यवहार में इन अंतरों को दर्शाते हैं।
उदाहरण 1: if_else() जाँच करता है कि दोनों विकल्पों का प्रकार एक ही है
मान लीजिए कि हमारे पास आर में निम्नलिखित डेटा फ्रेम है जिसमें विभिन्न बास्केटबॉल खिलाड़ियों के बारे में जानकारी है:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(22, 20, 28, 14, 13, 18, 27, 33)) #view data frame df team points 1 to 22 2 to 20 3 to 28 4 to 14 5 B 13 6 B 18 7 B 27 8 B 33
यदि हम एक नया कॉलम बनाने के लिए R बेस ifelse() फ़ंक्शन का उपयोग करते हैं जो “A” के टीम मान वाली पंक्तियों को “अटलांटा” मान और भिन्न मान वाली पंक्तियों को 0 मान निर्दिष्ट करता है, तो हमें कोई त्रुटि प्राप्त नहीं होगी। भले ही “अटलांटा” एक वर्ण है और 0 एक संख्या है:
#create new column based on values in team column df$city <- ifelse(df$team == ' A ', ' Atlanta ', 0) #view updated data frame df team points city 1 to 22 Atlanta 2 to 20 Atlanta 3 to 28 Atlanta 4 A 14 Atlanta 5 B 13 0 6 B 18 0 7 B 27 0 8 B 33 0
हालाँकि, यदि हम इसी कार्य को करने के लिए dplyr के if_else() फ़ंक्शन का उपयोग करते हैं, तो हमें एक त्रुटि प्राप्त होगी जो हमें बताती है कि हमने if else कथन में दो अलग-अलग डेटा प्रकारों का उपयोग किया है:
library (dplyr) #attempt to create new column based on values in team column df$city <- if_else(df$team == ' A ', ' Atlanta ', 0) Error: `false` must be a character vector, not a double vector.
उदाहरण 2: if_else() दिनांक ऑब्जेक्ट को संख्यात्मक मानों में परिवर्तित नहीं करता है
मान लीजिए कि हमारे पास आर में निम्नलिखित डेटा फ्रेम है जो एक स्टोर में विभिन्न तिथियों पर की गई बिक्री दिखाता है:
#create data frame df <- data. frame (date=as. Date (c('2022-01-05', '2022-01-17', '2022-01-22', '2022-01-23', '2022-01-29', '2022-02-13')), sales=c(22, 35, 24, 20, 16, 19)) #view data frame df dirty date 1 2022-01-05 22 2 2022-01-17 35 3 2022-01-22 24 4 2022-01-23 20 5 2022-01-29 16 6 2022-02-13 19
यदि हम दिनांक कॉलम के मानों को संशोधित करने के लिए आर बेस ifelse() फ़ंक्शन का उपयोग करते हैं, तो मान स्वचालित रूप से संख्यात्मक में परिवर्तित हो जाएंगे:
#if date is before 2022-01-20 then add 5 days df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date) dirty date 1 19002 22 2 19014 35 3 19014 24 4 19015 20 5 19021 16 6 19036 19
हालाँकि, यदि हम dplyr के if_else() फ़ंक्शन का उपयोग करते हैं, तो दिनांक ऑब्जेक्ट दिनांक के रूप में बने रहेंगे:
library (dplyr) #if date is before 2022-01-20 then add 5 days df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date) #view updated data frame df dirty date 1 2022-01-10 22 2 2022-01-22 35 3 2022-01-22 24 4 2022-01-23 20 5 2022-01-29 16 6 2022-02-13 19
उदाहरण 3: if_else() NA मानों को संभालने का तरीका निर्दिष्ट करने के लिए एक “अनुपलब्ध” तर्क प्रदान करता है
मान लीजिए कि हमारे पास R में निम्नलिखित डेटा फ़्रेम है:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', NA, 'B'), points=c(22, 20, 28, 14, 13, 18, 27, 33)) #view data frame df team points 1 to 22 2 to 20 3 to 28 4 to 14 5 B 13 6 B 18 7 <NA> 27 8 B 33
यदि हम नया कॉलम बनाने के लिए आर बेस ifelse() फ़ंक्शन का उपयोग करते हैं, तो NA मानों को संभालने का तरीका निर्दिष्ट करने के लिए कोई डिफ़ॉल्ट विकल्प नहीं है:
#create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ')
#view updated data frame
df
team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 <NA>
8 B 33 Boston
हालाँकि, यदि हम dplyr के if_else() फ़ंक्शन का उपयोग करते हैं तो हम NA मानों को संभालने का तरीका निर्दिष्ट करने के लिए लापता तर्क का उपयोग कर सकते हैं:
library (dplyr)
#create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ', missing=' other ')
#view updated data frame
df
team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 other
8 B 33 Boston
ध्यान दें कि टीम कॉलम में NA मान वाली पंक्ति को नए शहर कॉलम में “अन्य” मान प्राप्त होता है।
अतिरिक्त संसाधन
निम्नलिखित ट्यूटोरियल बताते हैं कि आर में अन्य सामान्य कार्य कैसे करें:
आर में एकाधिक शर्तों के साथ इफ़ स्टेटमेंट का उपयोग कैसे करें
आर में नेस्टेड इफ एल्स स्टेटमेंट कैसे लिखें
आर में अपना पहला ट्राइकैच() फ़ंक्शन कैसे लिखें