R Academy · पाठ

dplyr में बहु-तालिका Joins

inner_join, left_join, right_join, full_join और anti_join में दक्षता प्राप्त करें।

पाठ 3, कुल 4 में से13 चरण

dplyr में बहु-तालिका Joins, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

तालिकाओं को जोड़ना क्यों आवश्यक है?

वास्तविक डेटा शायद ही कभी एक ही तालिका में होता है। संबंधपरक डेटाबेस दोहराव से बचने के लिए जानकारी को कई तालिकाओं में बाँटते हैं। साझा कुंजियों के आधार पर तालिकाओं को संयोजित करने के लिए जॉइन का उपयोग किया जाता है। dplyr साफ़ और पढ़ने में आसान वाक्यविन्यास के साथ SQL-शैली के जॉइन फ़ंक्शन उपलब्ध कराता है।

library(dplyr)

# Two related tables
orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 3),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = 1:3,
  name = c('Alice','Bob','Carol'),
  city = c('NYC','LA','Chicago')
)

print(orders)
print(customers)

inner_join() — केवल मिलती हुई पंक्तियाँ

inner_join(x, y, by='key') केवल वे पंक्तियाँ लौटाता है जिनकी कुंजी दोनों तालिकाओं में मौजूद होती है। दूसरी तालिका में जिन पंक्तियों का कोई मिलान नहीं होता, उन्हें हटा दिया जाता है। यह सबसे सामान्य जॉइन प्रकार है।

library(dplyr)

orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 99),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# customer_id = 99 in orders has no match => dropped
# customer_id = 3 in customers has no match => dropped
inner_join(orders, customers, by = 'customer_id')

left_join() — बाईं ओर की सभी पंक्तियाँ रखें

left_join(x, y, by='key') x की सभी पंक्तियों को रखता है और y से मिलान करने वाला डेटा भरता है। y में जिन x पंक्तियों का कोई मिलान नहीं होता, उनके लिए y के कॉलम में NA आता है। परिणाम मुख्य रूप से बाईं तालिका पर आधारित होता है।

library(dplyr)

orders <- data.frame(
  order_id = 1:4,
  customer_id = c(1, 2, 1, 99),
  amount = c(250, 180, 320, 90)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# Order with customer_id=99 is kept, name = NA
left_join(orders, customers, by = 'customer_id')

right_join() — दाईं ओर की सभी पंक्तियाँ रखें

right_join(x, y, by='key') y की सभी पंक्तियों को रखता है। x में जिन y पंक्तियों का कोई मिलान नहीं होता, उनके लिए x के कॉलम में NA आता है। यह left_join() का उल्टा रूप है — कम इस्तेमाल होता है, क्योंकि आप तालिकाओं का क्रम बदल सकते हैं।

library(dplyr)

orders <- data.frame(
  order_id = c(1, 2),
  customer_id = c(1, 2),
  amount = c(250, 180)
)

customers <- data.frame(
  customer_id = c(1, 2, 3),
  name = c('Alice','Bob','Carol')
)

# Carol (customer_id=3) has no orders => NA for order columns
right_join(orders, customers, by = 'customer_id')

full_join() — सभी पंक्तियाँ रखें

full_join(x, y, by='key') दोनों तालिकाओं की प्रत्येक पंक्ति को रखता है। किसी भी ओर की बिना-मिलान वाली पंक्तियों के लिए दूसरी तालिका के कॉलम में NA आता है। जब आप कोई भी डेटा खोने का जोखिम नहीं उठा सकते, तब इसका उपयोग करें।

library(dplyr)

q1 <- data.frame(product = c('A','B','C'), q1_sales = c(100, 200, 150))
q2 <- data.frame(product = c('A','C','D'), q2_sales = c(120, 160, 90))

# D appears only in q2, B only in q1 => both kept
full_join(q1, q2, by = 'product')

anti_join() — बिना-मिलान वाली पंक्तियाँ खोजें

anti_join(x, y, by='key') x की वे पंक्तियाँ लौटाता है जिनका y में कोई मिलान नहीं होता। y के कोई कॉलम शामिल नहीं किए जाते। यह अनाथ रिकॉर्ड, बिना-मिलान वाले ऑर्डर या संदर्भ तालिका में मौजूद न होने वाली वस्तुएँ खोजने के लिए बहुत उपयोगी है।

library(dplyr)

all_employees <- data.frame(
  id = 1:5,
  name = c('Alice','Bob','Carol','Dave','Eve')
)

trained <- data.frame(id = c(1, 3, 5))

# Who has NOT completed training?
anti_join(all_employees, trained, by = 'id')

semi_join() — मिलान के आधार पर फ़िल्टर करें

semi_join(x, y, by='key') x की वे पंक्तियाँ लौटाता है जिनका y में मिलान होता है, लेकिन y के कॉलम नहीं जोड़ता। यह inner_join() जैसा है, पर केवल x के कॉलम लौटाता है — फ़िल्टर चरण के रूप में उपयोगी।

library(dplyr)

products <- data.frame(
  id = 1:5,
  name = c('Widget','Gadget','Donut','Gizmo','Sprocket'),
  price = c(9.99, 24.99, 1.99, 14.99, 4.99)
)

ordered_products <- data.frame(id = c(1, 3, 5))

# Products that appear in at least one order
semi_join(products, ordered_products, by = 'id')

अलग-अलग कॉलम नामों पर जॉइन करना

जब x और y में कुंजी वाले कॉलम के नाम अलग हों, तब by = c('x_col' = 'y_col') वाक्यविन्यास का उपयोग करें। यह बाईं तालिका के कॉलम नाम को दाईं तालिका के संबंधित कॉलम से जोड़ता है।

library(dplyr)

orders <- data.frame(
  order_id = 1:3,
  user_id = c(10, 20, 10),
  amount = c(100, 200, 150)
)

users <- data.frame(
  id = c(10, 20, 30),
  username = c('alice','bob','carol')
)

# orders.user_id matches users.id
left_join(orders, users, by = c('user_id' = 'id'))

एकाधिक कुंजियों पर जॉइन करना

by में एक वेक्टर देकर आप कई कॉलमों पर जॉइन कर सकते हैं। किसी पंक्ति को जॉइन करने के लिए निर्दिष्ट सभी कॉलमों का मिलान होना आवश्यक है। यह उन संयुक्त कुंजियों के लिए उपयोगी है जिनमें कोई एक कॉलम अद्वितीय नहीं होता।

library(dplyr)

actual <- data.frame(
  year = c(2023, 2023, 2024, 2024),
  quarter = c('Q1','Q2','Q1','Q2'),
  sales = c(100, 120, 130, 150)
)

target <- data.frame(
  year = c(2023, 2023, 2024, 2024),
  quarter = c('Q1','Q2','Q1','Q2'),
  target = c(110, 115, 125, 145)
)

inner_join(actual, target, by = c('year', 'quarter'))

कई जॉइन को श्रृंखलाबद्ध करना

पाइप ऑपरेटर का उपयोग करके आप एक ही पाइपलाइन में कई जॉइन को श्रृंखलाबद्ध कर सकते हैं। एक-एक चरण में कई लुकअप तालिकाओं से जानकारी जोड़कर एक डिनॉर्मलाइज़्ड दृश्य तैयार करें।

library(dplyr)

orders <- data.frame(order_id=1:3, cust_id=c(1,2,1), prod_id=c(10,10,20))
customers <- data.frame(cust_id=1:2, name=c('Alice','Bob'))
products <- data.frame(prod_id=c(10,20), product=c('Widget','Gadget'))

orders %>%
  left_join(customers, by = 'cust_id') %>%
  left_join(products, by = 'prod_id')

डुप्लिकेट कॉलम सँभालना

जब दोनों तालिकाओं में जॉइन कुंजी के अलावा समान नाम वाले कॉलम हों, तो dplyr .x और .y प्रत्यय जोड़ता है। आप suffix आर्ग्युमेंट से इन्हें बदल सकते हैं, फिर आवश्यकता के अनुसार चयन या नाम बदल सकते हैं।

library(dplyr)

current <- data.frame(id=1:3, value=c(10,20,30), date=Sys.Date())
historic <- data.frame(id=1:3, value=c(8,22,28), date=Sys.Date()-365)

# Both have 'value' and 'date' columns
result <- inner_join(current, historic, by='id',
                     suffix=c('_current','_historic'))
print(names(result))

त्वरित जाँच

dplyr का कौन-सा जॉइन दाईं तालिका में बिना मिलान वाली पंक्ति रखने वाली केवल बाईं तालिका की पंक्तियाँ लौटाता है?

पुनरावलोकन: dplyr जॉइन

dplyr में कई तालिकाओं के जॉइन के मुख्य बिंदु:

  • inner_join() — दोनों तालिकाओं से केवल मिलान वाली पंक्तियाँ
  • left_join() — बाईं तालिका की सभी पंक्तियाँ; दाईं ओर मिलान न होने पर NA
  • right_join() — दाईं तालिका की सभी पंक्तियाँ; बाईं ओर मिलान न होने पर NA
  • full_join() — दोनों तालिकाओं की सभी पंक्तियाँ; मिलान न होने पर NA
  • anti_join() — y में मिलान के बिना x की पंक्तियाँ (फ़िल्टर उपकरण)
  • semi_join() — y में मिलान वाली x की पंक्तियाँ (फ़िल्टर उपकरण)
  • अलग-अलग कॉलम नामों के लिए by = c('x_col' = 'y_col') का उपयोग करें
  • संयुक्त कुंजियों के लिए वेक्टर का उपयोग करें: by = c('year', 'quarter')
library(dplyr)

# Chain of joins: the typical real-world pattern
orders <- data.frame(oid=1:3, cid=c(1,2,1), pid=c(10,20,10))
customers <- data.frame(cid=1:2, name=c('Alice','Bob'))
products <- data.frame(pid=c(10,20), name=c('Widget','Gadget'), price=c(9.99,19.99))

orders %>%
  inner_join(customers, by='cid') %>%
  inner_join(products, by='pid', suffix=c('','_product')) %>%
  select(oid, name, name_product, price)
शुरुआत निःशुल्क

एआई शिक्षक के साथ R सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
43
पाठ
159

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

क्या “dplyr में बहु-तालिका Joins” पाठ निःशुल्क है?

हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “dplyr में बहु-तालिका Joins” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“dplyr में बहु-तालिका Joins” में मैं क्या सीखूँगा?

inner_join, left_join, right_join, full_join और anti_join में दक्षता प्राप्त करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“dplyr में बहु-तालिका Joins” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. समूहीकृत सारांश और group_by()
  2. Window फ़ंक्शन: lag, lead, cumsum
  3. dplyr में बहु-तालिका Joins
  4. Tidy Evaluation: {{ }} और .data
← R Academy पर वापस जाएँ