ए: 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 मान वाली पंक्ति को नए शहर कॉलम में “अन्य” मान प्राप्त होता है।

अतिरिक्त संसाधन

निम्नलिखित ट्यूटोरियल बताते हैं कि आर में अन्य सामान्य कार्य कैसे करें:

आर में एकाधिक शर्तों के साथ इफ़ स्टेटमेंट का उपयोग कैसे करें
आर में नेस्टेड इफ एल्स स्टेटमेंट कैसे लिखें
आर में अपना पहला ट्राइकैच() फ़ंक्शन कैसे लिखें

एक टिप्पणी जोड़ने

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *