मैं एक data.table एक्स राशि वेक्टर खोज से बचने के लिए कैसे है कि मैं 2 चरित्र चरमें data.table
X[, varC :=((VarA =="A" & !is.na(VarA))
| (VarA == "AB" & VarB =="B" & !is.na(VarA) & !is.na(VarB))
)
]
इस कोड काम करता है के आधार पर एक चर बनाने के लिए करना चाहते हैं, लेकिन यह बहुत धीमी है, क्योंकि यह 2 चर चर पर वेक्टर स्कैन करता है। ध्यान दें कि मैं Vara और VarB द्वारा दावे 4 टेबल सेट नहीं करता हूं। क्या डेटाटेबल में ऐसा करने का कोई "सही" तरीका है?
अद्यतन 1: मैं इस परिवर्तन के लिए सेटकी का उपयोग नहीं करता क्योंकि मैं पहले से ही अन्य परिवर्तनीय परिवर्तनों के लिए सेटकी (एक्स, वर्ष, आईडी) का उपयोग करता हूं। यदि मैं करता हूं, तो मुझे इस परिवर्तन के बाद वर्ष, आईडी को रीसेट करने की आवश्यकता है।
अद्यतन 2: मैं बेंचमार्क मैथ्यू के दृष्टिकोण के साथ मेरी दृष्टिकोण किया था, और उसके बहुत तेजी से है:
test replications elapsed relative user.self sys.self user.child sys.child
2 Matthew 100 3.377 1.000 2.596 0.605 0 0
1 vectorSearch 100 200.437 59.354 76.628 40.260 0 0
केवल मामूली बात है setkey तो फिर से setkey फिर से कुछ हद तक वर्बोज़ है :)
आप कुंजी सेट क्यों नहीं करते? –
वहां कुछ अनावश्यक कोडिंग भी हो सकती है; उदाहरण के लिए यदि VarA == "एबी" सत्य है, तो यह हमेशा सत्य भी होगा! is.na (VarA), है ना? –
हाय मार्क,! Is.na आवश्यक है। अन्यथा, अगर VarA गुम है, तो स्थिति VarA == "AB" 0 की बजाय NA वापस कर देगी क्योंकि मुझे – AdamNYC