Merging and joining data frames

merge(df1, df2, by = "roll") બે data frames ને વહેંચાયેલી ચાવી પર બરાબર SQL ના JOIN ની જેમ સીવે છે, અને all/all.x/all.y નાં switches inner, left, right અને full outer વર્તન વચ્ચે પસંદગી કરે છે.

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

બે કોષ્ટક, એક પ્રશ્ન

કુલસચિવ આખરે CGPA ની file વહેંચે છે: roll, cgpa, દરેક student દીઠ એક હરોળ. તમારા survey માં roll, screen છે. જે પ્રશ્ન પૂછવાની બધા રાહ જોતા હતા: શું screen time નો CGPA સાથે સંબંધ છે?

બે variables જુદા data frames માં વસે છે, ફક્ત વહેંચાયેલા roll numbers થી જોડાયેલા.

તમે SQL માં (JOIN) અને pandas માં (pd.merge) કોષ્ટકો સીવ્યાં છે. R ની સોય છે merge(), અને તમારી join ની સમજ પૂરેપૂરી ઊતરે છે: ફક્ત switch નાં નામ બદલાય છે.

Theory

બે રજિસ્ટર વાળો કારકુન, ફરી

BCA303 વાળો એ જ કારકુન: એક હાથમાં પ્રવેશનું રજિસ્ટર, બીજા હાથમાં marks નું, roll number પ્રમાણે હરોળ મેળવીને સ્ટેપલ કરતો.

ફક્ત એક જ નિર્ણય બદલાય છે: જે roll નો મેળ ન મળે એનું શું કરવું: student ને છોડી દેવો (inner), એને ખાલી જગ્યાઓ સાથે રાખવો (left), બંને ચોપડામાંથી બધું રાખવું (full outer). merge() એ નિર્ણયને બે શબ્દોમાં કોડ કરે છે: all.x, all.y.

Practical

Join નું કુટુંબ, R ની જોડણીમાં

survey <- data.frame(roll = c(101, 102, 103),
                     screen = c(120, 240, 90))
cgpa   <- data.frame(roll = c(101, 103, 104),
                     cgpa = c(8.2, 6.9, 7.5))

# INNER (the default): only rolls present in BOTH
merge(survey, cgpa, by = "roll")
#   roll screen cgpa      -> 101 and 103 only

# LEFT: keep every SURVEY row; missing cgpa becomes NA
merge(survey, cgpa, by = "roll", all.x = TRUE)
#   102 keeps its screen, cgpa = NA

# FULL OUTER: keep everything from both
merge(survey, cgpa, by = "roll", all = TRUE)
#   102 (no cgpa) AND 104 (no survey) both appear

# different key names on the two sides:
# merge(survey, cgpa, by.x = "roll", by.y = "student_id")

# find the unmatched after a left join:
m <- merge(survey, cgpa, by = "roll", all.x = TRUE)
m[is.na(m$cgpa), ]        # the surveyed-but-no-CGPA students

At a glance

merge() નાં switches = SQL ના join નું કુટુંબ

SQL joinmerge() નું callશું રાખે છે
INNERmerge(x, y, by)ફક્ત મેળ ખાતી ચાવીઓ (default)
LEFTall.x = TRUEx નું બધું; ખાલી જગ્યાઓમાં NA
RIGHTall.y = TRUEy નું બધું
FULL OUTERall = TRUEબંનેમાંથી બધું

Quiz

survey માં 60 હરોળ છે; cgpa માં 55 (પાંચ students નું CGPA હજી નથી). એક student merge(survey, cgpa, by = "roll") ચલાવે છે અને અહેવાલ ચૂપચાપ 55 students આવરી લે છે. શું થયું, અને "બધા survey કરાયેલા students નું વિશ્લેષણ કરો" માટે સાચી ચાલ કઈ હતી?

  1. Default merge એ INNER છે: પાંચ મેળ વગરના students ચૂપચાપ ગાયબ થયા; all.x = TRUE (left join) બધા 60 ને NA cgpa સાથે રાખે છે
  2. merge() નિષ્ફળ ગયું: જુદી હરોળની સંખ્યાવાળાં merge થઈ શકતાં નથી
  3. Survey ની હરોળ જ રાખવા all = TRUE જોઈતું હતું
  4. એ પાંચ students CSV files માંથી કાઢી નખાયા
Show the answer

Default merge એ INNER છે: પાંચ મેળ વગરના students ચૂપચાપ ગાયબ થયા; all.x = TRUE (left join) બધા 60 ને NA cgpa સાથે રાખે છે

merge() નું default એ inner join છે: મેળ ન ખાતા rolls ખાલી દેખાતા જ નથી, કોઈ ચેતવણી વગર: બરાબર એ જ ચૂપ સંકોચન જે તમે SQL ના INNER JOIN સાથે મળ્યા હતા. "બધા survey કરાયેલા students નું વિશ્લેષણ" એ left join નું વાક્ય છે: all.x = TRUE, અને પાંચ NA cgpa સાથે દેખાય છે (પછી તમારી NA ની ઓજારપેટીથી સંભાળાય છે). all = TRUE એને બદલે ફક્ત cgpa વાળા વધારાના students ઉમેરે. આને તરત પકડતી ટેવ: દરેક merge પહેલાં અને પછી nrow().

Think first

હરોળની સંખ્યા ધારો

survey: rolls 101, 102, 103. cgpa: rolls 101, 103, 104. Tap કરતાં પહેલાં, દરેકની હરોળની સંખ્યા આપો: (1) inner merge, (2) all.x = TRUE, (3) all = TRUE. પછી કહો કે આવૃત્તિ 3 માં કયા rolls NA વહન કરે છે.

Show the answer

1. 2 હરોળ (101, 103: બંનેમાં હાજર).

2. 3 હરોળ (survey ના બધા rolls; 102 નું cgpa = NA).

3. 4 હરોળ (101, 102, 103, 104): roll 102 નું cgpa NA છે અને roll 104 નું screen NA છે: દરેક બાજુનું અનાથ બીજી બાજુની ખાલી જગ્યા વહન કરે છે.

Inner ≤ left ≤ full: જો તમારી ગણતરી ક્યારેય એ ક્રમનું ઉલ્લંઘન કરે, તો પુનરાવર્તિત ચાવી હરોળ વધારી રહી છે: જાણવા જેવો આગલો ફાંદો.

Watch out

બે ચૂપ મર્જર

Inner નું default: મેળ ન ખાતી હરોળ એક શબ્દ વગર અદૃશ્ય થાય છે: ટાઈપ કરતાં પહેલાં join નો પ્રકાર નક્કી કરો, અને પહેલાં/પછી nrow().

પુનરાવર્તિત ચાવીઓ ગુણાકાર કરે છે: જો cgpa માં ભૂલથી roll 101 બે વાર હોય, તો merge દરેક નકલને જોડે છે: 60 હરોળ કોઈ ભૂલ વગર 61+ થાય છે. Merge કરતાં પહેલાં sum(duplicated(cgpa$roll)) એ દસ સેકન્ડનો વીમો છે.

Theory

આનાથી શક્ય બનતું વિશ્લેષણ

Screen અને cgpa આખરે એક જ data frame માં આવતાં, એકમ 1-2 ના પ્રશ્નો ખરેખરી જોડીઓ પર જીવંત થાય છે: screen સામે cgpa નો scatter plot (નજરે સહસંબંધ), આગલા પાઠની સારાંશની commands દ્વારા જૂથની સરેરાશ, વપરાશના પટ્ટા સામે grade ના પટ્ટાનું cross-tab. દરેક ગંભીર વિશ્લેષણ merge થી શરૂ થાય છે: એક જ લોકો વિશેનો data હંમેશા જુદી files માં આવે છે.

Summary

Key takeaways

  • merge(x, y, by = "key") વહેંચાયેલા ખાના પર જોડે છે; DEFAULT એ INNER છે (ફક્ત મેળ ખાતી ચાવીઓ).
  • all.x = TRUE = left join (x નું બધું, NA ની ખાલી જગ્યાઓ); all.y = right; all = TRUE = full outer.
  • જુદાં ચાવીનાં નામ: by.x / by.y; અનેક ચાવીઓ: by = c(...).
  • Left join નાં NA મેળ ન ખાધેલાંને ઉજાગર કરે છે: is.na() થી શોધો.
  • દરેક merge પહેલાં/પછી nrow(); પુનરાવર્તિત ચાવીઓ ચૂપચાપ હરોળ ગુણે છે.
  • SQL ના JOINs અને pd.merge(how=) જેવું જ કુટુંબ: ત્રીજી ભાષા, એ જ કારકુન.
  • Memory hook: મેળ ન ખાતા roll નું કારકુન શું કરે છે?

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Working with Data in R

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Merging and joining data frames · Statistical Methods and Data Analysis (MDC-03) · Gri-Learn