भरने वाले मूल्य के साथ दो डेटा तालिकाओं (डीटी 1, डीटी 2) पर बाएं बाहरी जुड़ने का सबसे आसान तरीका क्या है (या कुछ अन्य मूल्य) बाएं डेटा तालिका में मान्य NA मानों को ओवरराइट किए बिना एनए (डिफ़ॉल्ट) के बजाय?आर बाएं बाहरी 0 के साथ जुड़ें एनए के बजाय भरें बाएं तालिका में वैध एनए की रक्षा करते समय
ऐसे this thread में के रूप में एक आम जवाब है, बाईं बाहरी करना है या तो dplyr::left_join
या data.table::merge
या data.table
के DT2 साथ शामिल होने के [DT1] बंद स्तंभ ब्रैकेट वाक्य रचना, बस में 0
द्वारा सभी NA
मूल्यों की जगह एक दूसरे चरण के बाद शामिल डेटा तालिका। उदाहरण के लिए:
library(data.table);
dt1 <- data.table(x=c('a', 'b', 'c', 'd', 'e'), y=c(NA, 'w', NA, 'y', 'z'));
dt2 <- data.table(x=c('a', 'b', 'c'), new_col=c(1,2,3));
setkey(dt1, x);
setkey(dt2, x);
merged_tables <- dt2[dt1];
merged_tables[is.na(merged_tables)] <- 0;
यह दृष्टिकोण जरूरी हो जाती है dt1
में कोई मान्य एनए मूल्यों को संरक्षित किया जा करने की जरूरत है कि देखते हैं कि। फिर भी, जैसा कि आप ऊपर के उदाहरण में देख सकते हैं, परिणाम हैं:
x new_col y
1: a 1 0
2: b 2 w
3: c 3 0
4: d 0 y
5: e 0 z
लेकिन वांछित परिणाम इस प्रकार हैं: इस तरह के एक तुच्छ मामले में
x new_col y
1: a 1 NA
2: b 2 w
3: c 3 NA
4: d 0 y
5: e 0 z
, data.table
उपयोग करने के बजाय सभी तत्वों वाक्य रचना की जगह जैसा कि ऊपर, बस new_col
में एनए मूल्यों बदला जा सकता है:
library(dplyr);
merged_tables <- mutate(merged_tables, new_col = ifelse(is.na(new_col), 0, new_col));
हालांकि, इस पद्धति बहुत बड़े डेटा सेट जहां दर्जनों या सैकड़ों के लिए व्यावहारिक नहीं है नए कॉलम मर्ज किए जाते हैं, कभी-कभी गतिशील रूप से बनाए गए कॉलम नामों के साथ। भले ही कॉलम नाम सभी समय से पहले ज्ञात थे, फिर भी सभी नए कॉलमों को सूचीबद्ध करने के लिए बहुत बदसूरत है और प्रत्येक पर एक उत्परिवर्ती शैली बदलती है।
एक बेहतर तरीका होना चाहिए? dplyr::left_join
, data.table::merge
, या data.table
के ब्रैकेट के सिंटैक्स को आसानी से उपयोगकर्ता को fill
मान को निर्दिष्ट करने की अनुमति देने के लिए समस्या को हल किया जाएगा। की तरह कुछ:
merged_tables <- data.table::merge(dt1, dt2, by="x", all.x=TRUE, fill=0);
data.table
के dcast
समारोह उपयोगकर्ता fill
मूल्य निर्दिष्ट कर सकते हैं, तो मैं समझ यह है कि मैं सिर्फ के बारे में सोच नहीं कर रहा हूँ करने के लिए एक आसान तरीका होना चाहिए।
सुझाव?
संपादित करें: @jangorecki ने टिप्पणियों में बताया कि data.table
GitHug page पर वर्तमान में एक फीचर अनुरोध है जो मैंने अभी उल्लेख किया है, nomatch=0
वाक्यविन्यास को अपडेट करना। data.table
की अगली रिलीज में होना चाहिए।
(समाधान tidyr और dplyr की आवश्यकता है) अपने 'merge' के अंत में या बाहरी उपयोग करके शामिल' [..., nomatch = एनए] 'श्रृंखला data.table क्वेरी' मर्ज() [is.na (कोला), कोल: = 0] '। एक खुला एफआर है इसलिए 'नामांकन' तर्क मनमाना मूल्यों को संभाल सकता है, वर्तमान में बाहरी शामिल होने के लिए यह केवल 'एनए' का उपयोग कर सकता है। – jangorecki
मुझे खेद है, लेकिन मुझे आपके उत्तर को समझने में परेशानी हो रही है। 'कोल' कहां से आता है? यह सुनकर खुशी हुई कि एक खुला फीचर अनुरोध है। मैं इसे अपना +1 जोड़ दूंगा। –
'col' सिर्फ एक कॉलम है जिस पर शामिल किया जा रहा है – jangorecki