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 शामिल है।