2015-05-21 4 views
10

मैं प्रोग्रामिंग के लिए काफी नया हूं और आर में data.table भी है - तो शायद यह प्रश्न वास्तव में सरल है, लेकिन मैंने खोज की और कोई समाधान नहीं मिला।

मैं 4 चर जोड़ों से मिलान करने की कोशिश कर रहा हूं और लुकअप मान के साथ एक कॉलम जोड़ रहा हूं। आधार में, मैं merge(df1,df2, by.x=c("lsr","ppr"),by.y=c("li","pro")) करता हूं, जहां डीएफ 1 में 9 कोल्स और डीएफ 2 (2 एलएसआर और प्रो) डीएफ 2 में केवल 3, ली, प्रो और "वैल्यू" है जो मुझे रूचि है, अल्फा।

यह ठीक काम करता है, लेकिन जैसा कि मैं data.table का एक बड़ा प्रशंसक बनना शुरू कर रहा हूं, मैं इसे डेटाटेबल तरीके से करना चाहता हूं - और क्योंकि मेरे पास कुछ लाख पंक्तियां हैं - इसलिए आधार विलय धीमा है (मैंने देखा , कि by.x और by.y सुविधा डेटा.table के लिए लंबित है, लेकिन हो सकता है कि कोई कामकाज हो)। ,डेटा कॉल करने योग्य एकाधिक स्तंभों द्वारा विलय

df2: 
     alpha   li  pro 
     1: 0.5000000 0.01666667 0.01666667 
     2: 0.3295455 0.03333333 0.01666667 
     3: 0.2435897 0.05000000 0.01666667 
     4: 0.1917808 0.06666667 0.01666667 
     5: 0.1571429 0.08333333 0.01666667 
df1:  
      demand rtime mcv   mck  ppr  mlv   mlk  lsr 
     1: 0.3  1 357.57700 0.099326944 0.01666667 558.27267 0.155075741 0.01666667 
     2: 0.3 10 548.75433 0.152431759 0.01666667 614.30667 0.170640741 0.03333333 
     3: 0.3 11 314.55767 0.087377130 0.01666667 636.48100 0.176800278 0.03333333 
     4: 0.3  2 312.15033 0.086708426 0.01666667 677.48100 0.188189167 0.06666667 
     5: 0.3  3 454.47867 0.126244074 0.01666667 608.92067 0.169144630 0.01666667 
    ---                    
6899196: 0.6  5 537.92673 0.149424093 1.00000000 537.92673 0.149424093 1.00000000 
6899197: 0.6  6 277.34732 0.077040923 1.00000000 277.34732 0.077040923 1.00000000 
6899198: 0.6  7 73.31484 0.020365235 1.00000000 73.31484 0.020365235 1.00000000 
6899199: 0.6  8 32.04197 0.008900546 1.00000000 32.04197 0.008900546 1.00000000 
6899200: 0.6  9 14.59008 0.004052799 1.00000000 14.59008 0.004052799 1.00000000 

पिछले शायद के हित है, कि df2 में मैं अद्वितीय पंक्तियां है, और DF1 में, मैं LSR और पीपीआर के संबंध में डुप्लिकेट के बहुत सारे है: नीचे कुछ नमूना डेटा देखें। मैंने दो चाबियाँ सेट करने और डेटा.table तरीके से जुड़ने और अल्फा के साथ एक नया कॉलम जोड़ने की भी कोशिश की। लेकिन सफलता के बिना। आपकी मदद के लिए धन्यवाद!

+0

यदि आपको बाहरी शामिल होने की आवश्यकता नहीं है, तो आप बस बाएं, सही जुड़ाव या बाइनरी जुड़ने का उपयोग करके आंतरिक शामिल हो सकते हैं। सवाल यह है कि आप कौन सा चाहते हैं। यद्यपि आपके बेस आर कोड द्वारा निर्णय लेने पर ऐसा लगता है कि आप एक आंतरिक शामिल हो सकते हैं? इसके अलावा, आप कौन सा कॉलम रखना चाहते हैं? आपके पास 'df1' –

+0

धन्यवाद में 'प्रो' कॉलम भी नहीं है। असल में मेरा मानना ​​है कि इस मामले में आंतरिक और बाएं जुड़ने समान हैं, क्योंकि एलएसआर और पीपीआर के सभी संयोजन, या ली और प्रो दोनों डीएफ 1 और डीएफ 2 में शामिल हैं। और डीएफ 1 में समर्थक नहीं है एक टाइपो !! इसके लिए खेद है, मेरा मतलब है, पीएफआर डीएफ 1 में, मैं इसे संपादित और सही कर दूंगा। मैं सभी कॉलम को df1 से रखना चाहता हूं और अल्फा को नए कॉलम –

+0

के रूप में जोड़ना चाहता हूं यदि आपको केवल 'अल्फा' कॉलम अपडेट करते समय बाएं 'df1' में शामिल होना है, तो यह एक साधारण बाइनरी शामिल है। 'Setkey (df1, lsr, ppr) आज़माएं; सेटकी (डीएफ 2, ली, समर्थक); डीएफ 1 [डीएफ 2, अल्फा: = i.alpha]; डीएफ 1' –

उत्तर

11

आप बयान टिप्पणी में डेविड Arenburg द्वारा प्रदान का उपयोग कर सकते हैं:

setkey(df1, lsr, ppr) 
setkey(df2, li, pro) 
df1[df2, alpha := i.alpha] 

current devel version, 1.9.5 से, हम प्रदर्शन कर सकते हैं on तर्क का उपयोग कुंजी सेट किए बिना सीधे जुड़ जाता है:

df1[df2, alpha := i.alpha, on = c(lsr="li", ppr="pro")] 

यदि आप डेवेल संस्करण को स्थापित नहीं करना चाहते हैं, तो आप तब तक प्रतीक्षा कर सकते हैं जब तक इसे CRAN पर v1.9.6 के रूप में धक्का दिया जाता है।

संबंधित मुद्दे