मैं data.table का उपयोग कर रहा हूं और ऐसे कई कार्य हैं जिनके लिए मुझे एक कुंजी (जैसे X[Y]
) सेट करने की आवश्यकता है । जैसे, मैं यह समझना चाहता हूं कि मेरे डेटा तालिकाओं में कुंजियों को ठीक से सेट करने के लिए एक कुंजी क्या करती है।
एक स्रोत जो मैंने पढ़ा था ?setkey
।
setkey()
adata.table
को सॉर्ट करें और इसे सॉर्ट करें। सॉर्ट किए गए कॉलम कुंजी हैं। कुंजी किसी भी क्रम में कोई भी कॉलम हो सकती है। स्तंभों को हमेशा बढ़ते क्रम में क्रमबद्ध किया जाता है। तालिका को संदर्भ द्वारा बदल दिया जाता है। अस्थायी रूप से काम करने वाली मेमोरी के अलावा कोई भी कॉपी एक कॉलम के रूप में बड़ी नहीं होती है।
यहाँ मेरा तात्पर्य यह है कि एक कुंजी data.table को "सॉर्ट" करेगी, जिसके परिणामस्वरूप बहुत ही समान प्रभाव होगा order()
। हालाँकि, यह एक कुंजी होने के उद्देश्य की व्याख्या नहीं करता है।
Data.table FAQ 3.2 और 3.3 बताते हैं:
3.2 मेरे पास एक बड़ी मेज पर चाबी नहीं है, लेकिन समूह बनाना अभी भी बहुत जल्दी है। ऐसा क्यों है?
data.table मूलांक छँटाई का उपयोग करता है। यह अन्य प्रकार के एल्गोरिदम की तुलना में सांकेतिक रूप से तेज है। मूलांक केवल पूर्णांकों के लिए विशिष्ट रूप से है, देखें
?base::sort.list(x,method="radix")
। यह भी एक कारण है किsetkey()
जल्दी क्यों है। जब कोई कुंजी सेट नहीं होती है, या हम उस कुंजी से एक अलग क्रम में समूह बनाते हैं, तो हम इसे एक तदर्थ कहते हैं।३. 3.3 कुंजी में कॉलम को समूह द्वारा विज्ञापन समूह की तुलना में अधिक तेज़ी से क्यों जोड़ा जाता है?
क्योंकि प्रत्येक समूह रैम में सन्निहित है, जिससे पेज भ्रूण कम हो जाते हैं, और मेमोरी को
memcpy
C में लूप के बजाय बल्क ( C) में कॉपी किया जा सकता है।
यहां से, मुझे लगता है कि कुंजी को किसी भी तरह सेट करने से आर अन्य एल्गोरिदम पर "रेडिक्स सॉर्टिंग" का उपयोग करने की अनुमति देता है, और इसीलिए यह तेज है।
10 मिनट की त्वरित शुरुआत गाइड में चाबियों पर एक गाइड भी है।
- चांबियाँ
आइए डेटा.फ्रेम, विशिष्ट रूप से पंक्तिबद्ध नाम (या अंग्रेजी में, पंक्ति नामों) पर विचार करके शुरू करें। यही है, एक पंक्ति से संबंधित कई नाम। एकल पंक्ति से संबंधित कई नाम? यह वह नहीं है जो हमें data.frame में उपयोग किया जाता है। हम जानते हैं कि प्रत्येक पंक्ति में एक ही नाम है। एक व्यक्ति के कम से कम दो नाम होते हैं, एक rst नाम और दूसरा नाम। उदाहरण के लिए, टेलीफ़ोन डायरेक्टरी को व्यवस्थित करना उपयोगी है, जिसे उपनाम से क्रमबद्ध किया जाता है, फिर rst नाम। हालाँकि, data.frame में प्रत्येक पंक्ति का केवल एक नाम हो सकता है।
एक कुंजी में एक या अधिक स्तंभों के स्तंभ होते हैं, जो केवल वर्ण नहीं, बल्कि पूर्णांक, कारक, वर्ण या कुछ अन्य वर्ग हो सकते हैं। इसके अलावा, पंक्तियों को कुंजी द्वारा क्रमबद्ध किया जाता है। इसलिए, एक डेटाटेबल में अधिकतम एक कुंजी हो सकती है, क्योंकि इसे एक से अधिक तरीकों से सॉर्ट नहीं किया जा सकता है।
विशिष्टता को लागू नहीं किया जाता है, अर्थात, डुप्लिकेट कुंजी मानों की अनुमति है। चूँकि पंक्तियों को कुंजी द्वारा क्रमबद्ध किया जाता है, कुंजी में कोई भी डुप्लिकेट लगातार दिखाई देगा
टेलीफोन निर्देशिका यह समझने में सहायक थी कि कुंजी क्या है, लेकिन ऐसा लगता है कि कारक कॉलम होने की तुलना में एक कुंजी अलग नहीं है। इसके अलावा, यह स्पष्ट नहीं करता है कि एक कुंजी की आवश्यकता क्यों है (विशेष रूप से कुछ कार्यों का उपयोग करने के लिए) और कुंजी के रूप में सेट करने के लिए कॉलम कैसे चुनें। इसके अलावा, ऐसा लगता है कि किसी कॉलम के रूप में समय के साथ डेटाटेबल में, किसी अन्य कॉलम को कुंजी के रूप में सेट करने से संभवतः टाइम कॉलम भी गड़बड़ हो जाएगा, जो इसे और भी अधिक भ्रामक बनाता है क्योंकि मुझे नहीं पता कि क्या मुझे किसी अन्य कॉलम को सेट करने की अनुमति है चाभी। क्या कोई मुझे खुश कर सकता है?