R में डेटा फ़्रेम मर्ज करें: पूर्ण और आंशिक मिलान

अक्सर हमारे पास कई स्रोतों से डेटा होता है। विश्लेषण करने के लिए हमें मर्ज एक या अधिक के साथ दो डेटाफ़्रेम सामान्य कुंजी चर.

इस ट्यूटोरियल में आप सीखेंगे

पूरा मैच

पूर्ण मिलान उन मानों को लौटाता है जिनका गंतव्य तालिका में समकक्ष होता है। जो मान मेल नहीं खाते हैं, उन्हें नए डेटा फ़्रेम में नहीं लौटाया जाएगा। हालाँकि, आंशिक मिलान, अनुपलब्ध मानों को NA के रूप में लौटाता है।

हम एक सरल देखेंगे आंतरिक रूप से जुड़ाइनर जॉइन कीवर्ड उन रिकॉर्ड्स को चुनता है जिनके दोनों टेबल में मेल खाने वाले मान हैं। दो डेटासेट को जोड़ने के लिए, हम merge() फ़ंक्शन का उपयोग कर सकते हैं। हम तीन तर्कों का उपयोग करेंगे:

merge(x, y, by.x = x, by.y = y)

Arguments:
-x: The origin data frame
-y: The data frame to merge
-by.x: The column used for merging in x data frame. Column x to merge on
-by.y: The column used for merging in y data frame. Column y to merge on

उदाहरण:

चरों के साथ पहला डेटासेट बनाएँ

  • उपनाम
  • राष्ट्रीयता

चरों के साथ दूसरा डेटासेट बनाएँ

  • उपनाम
  • फिल्में

सामान्य कुंजी चर उपनाम है। हम दोनों डेटा को मर्ज कर सकते हैं और जाँच सकते हैं कि आयाम 7 × 3 है या नहीं।

हम डेटा फ़्रेम में stringsAsFactors=FALSE जोड़ते हैं क्योंकि हम नहीं चाहते हैं R स्ट्रिंग को फैक्टर में बदलने के लिए, हम चाहते हैं कि वेरिएबल को कैरेक्टर के रूप में माना जाए।

# Create origin dataframe(

producers <- data.frame(   
    surname =  c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"),    
    nationality = c("US","US","UK","US","Poland"),    
    stringsAsFactors=FALSE)

# Create destination dataframe
movies <- data.frame(    
    surname = c("Spielberg",
		"Scorsese",
                "Hitchcock",
              	"Hitchcock",
                "Spielberg",
                "Tarantino",
                "Polanski"),    
    title = c("Super 8",
    		"Taxi Driver",
    		"Psycho",
    		"North by Northwest",
    		"Catch Me If You Can",
    		"Reservoir Dogs","Chinatown"),                
     		stringsAsFactors=FALSE)

# Merge two datasets
m1 <- merge(producers, movies, by.x = "surname")
m1
dim(m1)

आउटपुट:

surname		nationality		title
1 Hitchcock		UK		Psycho
2 Hitchcock		UK		North by Northwest
3 Polanski		Poland		Chinatown
4 Scorsese		US		Taxi Driver
5 Spielberg		US		Super 8
6 Spielberg		US		Catch Me If You Can
7 Tarantino		US		Reservoir Dogs

जब सामान्य कुंजी चरों के अलग-अलग नाम हों तो आइए डेटा फ़्रेमों को मर्ज करें।

हम मूवीज़ डेटा फ़्रेम में उपनाम को नाम में बदलते हैं। हम यह जाँचने के लिए फ़ंक्शन समान (x1, x2) का उपयोग करते हैं कि क्या दोनों डेटाफ़्रेम समान हैं।

# Change name of ` movies ` dataframe
colnames(movies)[colnames(movies) == 'surname'] <- 'name'
# Merge with different key value
m2 <- merge(producers, movies, by.x = "surname", by.y = "name")
# Print head of the data
head(m2)

आउटपुट:

##surname     nationality		title
## 1 Hitchcock          UK		Psycho
## 2 Hitchcock          UK		North by Northwest
## 3 Polanski          Poland		Chinatown
## 4 Scorsese           US		Taxi Driver
## 5 Spielberg          US		Super 8
## 6 Spielberg          US		Catch Me If You Can
# Check if data are identical
identical(m1, m2)

आउटपुट:

## [1] TRUE

इससे पता चलता है कि कॉलम नाम अलग-अलग होने पर भी मर्ज ऑपरेशन किया जाता है।

आंशिक मिलान

यह आश्चर्य की बात नहीं है कि दो डेटाफ्रेम में समान सामान्य कुंजी चर नहीं होते हैं। पूर्ण मिलान, डेटाफ़्रेम लौटाता है केवल x और y दोनों डेटा फ़्रेम में पंक्तियाँ पाई जाती हैं। आंशिक विलय, अन्य डेटा फ़्रेम में बिना मेल खाने वाली पंक्तियों को रखना संभव है। इन पंक्तियों में उन स्तंभों में NA होगा जो आमतौर पर y से मानों से भरे होते हैं। हम all.x= TRUE सेट करके ऐसा कर सकते हैं।

उदाहरण के लिए, हम निर्माता डेटा फ़्रेम में मूवी संदर्भों के बिना एक नया निर्माता, लुकास जोड़ सकते हैं। यदि हम all.x= FALSE सेट करते हैं, तो R केवल दोनों डेटा सेट में मेल खाने वाले मानों को जोड़ेगा। हमारे मामले में, निर्माता लुकास मर्ज में शामिल नहीं होगा क्योंकि यह एक डेटासेट से गायब है।

आइए प्रत्येक आउटपुट का आयाम देखें जब हम all.x= TRUE निर्दिष्ट करते हैं और जब हम नहीं करते हैं।

# Create a new producer
add_producer <-  c('Lucas', 'US')
#  Append it to the ` producer` dataframe
producers <- rbind(producers, add_producer)
# Use a partial merge 
m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE)
m3

आउटपुट:

आंशिक मिलान

# Compare the dimension of each data frame
dim(m1)

आउटपुट:

## [1] 7 3
dim(m2)

आउटपुट:

## [1] 7 3
dim(m3)

आउटपुट:

## [1] 8 3

जैसा कि हम देख सकते हैं, नए डेटा फ़्रेम का आयाम 8×3 है जबकि m7 और m3 के लिए यह 1×2 है। R में पुस्तकों के डेटा फ़्रेम में लापता लेखक के लिए NA शामिल है।