मेरा प्रश्न संदर्भ बनाम प्रतिलिपि में असाइनमेंट से संबंधित है data.table
। मैं जानना चाहता हूं कि क्या कोई संदर्भ के अनुसार पंक्तियों को हटा सकता है
DT[ , someCol := NULL]
के बारे में जानना चाहता हूं
DT[someRow := NULL, ]
मुझे लगता है कि इस फ़ंक्शन के मौजूद नहीं होने का एक अच्छा कारण है, इसलिए शायद आप नीचे दिए गए अनुसार सामान्य प्रतिलिपि दृष्टिकोण के लिए एक अच्छा विकल्प बता सकते हैं। विशेष रूप से, उदाहरण के लिए मेरे पसंदीदा के साथ जा रहा है (data.table),
DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9)
# x y v
# [1,] a 1 1
# [2,] a 3 2
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
कहते हैं कि मैं इस डेटा से पहली पंक्ति को हटाना चाहता हूं। मैं जानता हूँ मैं यह कर सकता हूँ:
DT <- DT[-1, ]
लेकिन अक्सर हम इससे बचना चाहते हैं, क्योंकि हम ऑब्जेक्ट की प्रतिलिपि बना रहे हैं (और इसके लिए लगभग 3 * N मेमोरी की आवश्यकता होती है, यदि N object.size(DT)
, जैसा कि यहां बताया गया है । अब मैंने पाया है set(DT, i, j, value)
। मुझे पता है कि विशिष्ट मान कैसे सेट करें (जैसे यहां: सभी सेट करें) पंक्तियों में मान 1 और 2 और कॉलम 2 और 3 से शून्य)
set(DT, 1:2, 2:3, 0)
DT
# x y v
# [1,] a 0 0
# [2,] a 0 0
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
लेकिन मैं पहली दो पंक्तियों को कैसे मिटा सकता हूं, कहो? करते हुए
set(DT, 1:2, 1:3, NULL)
पूरे DT को NULL में सेट करता है।
मेरा SQL ज्ञान बहुत सीमित है, इसलिए आप लोग मुझे बताएं: data.table SQL तकनीक का उपयोग करता है, क्या SQL कमांड के बराबर है
DELETE FROM table_name
WHERE some_column=some_value
data.table में?
DT[ , keep := .I > 1]
, फिर बाद के कार्यों के लिए सबसेट:, DT[(keep), ...]
शायद setindex(DT, keep)
इस सबसेट की गति भी । रामबाण नहीं है, लेकिन अपने वर्कफ़्लो में एक डिज़ाइन विकल्प के रूप में विचार करने के लिए योग्य है - क्या आप वास्तव में उन सभी पंक्तियों को स्मृति से हटाना चाहते हैं , या आप उन्हें बाहर करना पसंद करेंगे? उत्तर उपयोग के मामले में भिन्न होता है।
data.table()
एसक्यूएल तकनीक का उपयोग करता है, क्योंकि एक एसक्यूएल में विभिन्न कार्यों और विभिन्न तर्कों के बीच एक समानांतर आकर्षित कर सकता हैdata.table
। मेरे लिए, "प्रौद्योगिकी" का संदर्भ कुछ हद तकdata.table
एक SQL डेटाबेस के शीर्ष पर कहीं बैठे है, जो AFAIK मामला नहीं है।