data.table
जुड़ता है और विलीन हो जाता है
खोज…
परिचय
?`[.data.table`
।
वाक्य - विन्यास
- x [i, on, j]
# join: data.table x & data.table या list i - x [!, मैं, जे]
# एंटी-जॉइन
टिप्पणियों
की-टेबल के साथ काम करना
तो x
और i
एक है कुंजी या x
मैच के लिए keyed है i
के पहले कुछ कॉलम, तो on
की तरह छोड़ा जा सकता है x[i]
।
सामान्य रूप में स्तंभ नामों का विघटन
में j
के x[i, on, j]
, के स्तंभों i
के साथ भेजा जा सकता है i.*
उपसर्गों।
सबसेट पर समूहीकरण
में j
के x[i, on, j, by=.EACHI]
, j
की प्रत्येक पंक्ति के लिए की जाती है i
।
यह केवल का मूल्य है by
मूल्य का उपयोग कर। किसी भी अन्य मूल्य के लिए, i
कॉलम उपलब्ध नहीं हैं।
जुड़ने में मूल्यों को अपडेट करें
जब डेटा "सुव्यवस्थित" होता है, तो इसे अक्सर कई तालिकाओं में व्यवस्थित किया जाता है। विश्लेषण के लिए डेटा को संयोजित करने के लिए, हमें एक तालिका को दूसरे से मानों के साथ "अपडेट" करना होगा।
उदाहरण के लिए, हमारे पास प्रदर्शन के लिए बिक्री डेटा हो सकता है, जहां कलाकार (उनके बजट) और स्थान (इसकी आबादी) की विशेषताओं को अलग-अलग तालिकाओं में संग्रहीत किया जाता है:
set.seed(1)
mainDT = data.table(
p_id = rep(LETTERS[1:2], c(2,4)),
geo_id = sample(rep(state.abb[c(1,25,50)], 3:1)),
sales = sample(100, 6)
)
pDT = data.table(id = LETTERS[1:2], budget = c(60, 75))
geoDT = data.table(id = state.abb[c(1,50)], pop = c(100, 200))
mainDT # sales data
# p_id geo_id sales
# 1: A AL 95
# 2: A WY 66
# 3: B AL 62
# 4: B MO 6
# 5: B AL 20
# 6: B MO 17
pDT # performer attributes
# id budget
# 1: A 60
# 2: B 75
geoDT # location attributes
# id pop
# 1: AL 100
# 2: WY 200
जब हम कुछ विश्लेषण करने के लिए तैयार होते हैं, तो हमें इन अन्य तालिकाओं से चर लेने की जरूरत होती है:
DT = copy(mainDT)
DT[pDT, on=.(p_id = id), budget := i.budget]
DT[geoDT, on=.(geo_id = id), pop := i.pop]
# p_id geo_id sales budget pop
# 1: A AL 95 60 100
# 2: A WY 66 60 200
# 3: B AL 62 75 100
# 4: B MO 6 75 NA
# 5: B AL 20 75 100
# 6: B MO 17 75 NA
कच्चे डेटा को दूषित करने से बचने के लिए एक copy
ली जाती है, लेकिन हम इसके बजाय सीधे mainDT
पर काम कर सकते हैं।
अलग-अलग तालिकाओं का उपयोग करने के लिए लाभ
इस संरचना के फायदे साफ-सुथरे आंकड़ों पर कागज में शामिल हैं, लेकिन इस संदर्भ में:
लापता डेटा का पता लगाना। मर्ज में मेल खाती केवल पंक्तियाँ एक असाइनमेंट प्राप्त करती हैं। हमारे पास ऊपर
geo_id == "MO"
लिए कोई डेटा नहीं है, इसलिए इसके चर हमारी अंतिम तालिका मेंNA
हैं। यदि हमें इस तरह से लापता डेटा दिखाई देता है, तो हम इसेgeoDT
अवलोकन तालिका में अनुपलब्ध अवलोकन पर वापसgeoDT
हैं और वहां से जांच कर सकते हैं कि क्या हमारे पास कोई डेटा समस्या है जिसे संबोधित किया जा सकता है।बोधगम्यता। हमारे सांख्यिकीय मॉडल के निर्माण में, यह ध्यान रखना ज़रूरी हो सकता है कि
budget
प्रत्येक कलाकार के लिए स्थिर हो। सामान्य तौर पर, डेटा की संरचना को समझने से लाभांश का भुगतान होता है।मेमोरी क्षमता। बड़ी संख्या में कलाकार और स्थान गुण हो सकते हैं जो सांख्यिकीय मॉडल में समाप्त नहीं होते हैं। इस तरह, हमें उन्हें विश्लेषण के लिए उपयोग की जाने वाली (संभवतः बड़े पैमाने पर) तालिका में शामिल करने की आवश्यकता नहीं है।
प्रोग्रामेटिक रूप से स्तंभों का निर्धारण
यदि pDT
में कई कॉलम हैं, लेकिन हम केवल कुछ का चयन करना चाहते हैं, तो हम उपयोग कर सकते हैं
p_cols = "budget"
DT[pDT, on=.(p_id = id), (p_cols) := mget(sprintf("i.%s", p_cols))]
चारों ओर कोष्ठक (p_cols) :=
आवश्यक हैं, जैसा कि स्तंभ बनाने पर डॉक्टर में उल्लेख किया गया है ।
सम-में शामिल होने के
# example data
a = data.table(id = c(1L, 1L, 2L, 3L, NA_integer_), x = 11:15)
# id x
# 1: 1 11
# 2: 1 12
# 3: 2 13
# 4: 3 14
# 5: NA 15
b = data.table(id = 1:2, y = -(1:2))
# id y
# 1: 1 -1
# 2: 2 -2
सहज बोध
के बारे में सोचो x[i]
के उपसमूह का चयन के रूप में x
की प्रत्येक पंक्ति के लिए i
। यह सिंटैक्स मिरर मैट्रिक्स आर बेस में सिमट रहा है और पहले तर्क अर्थ "कहाँ" के अनुरूप है, DT[where, select|update|do, by]
।
कोई आश्चर्यचकित हो सकता है कि यह नया वाक्यविन्यास सीखने लायक क्यों है, क्योंकि merge(x,i)
अभी भी data.tables के साथ काम करता है। संक्षिप्त उत्तर यह है कि हम आम तौर पर विलय करना चाहते हैं और फिर आगे कुछ करना चाहते हैं। x[i]
सिंटैक्स उपयोग के इस पैटर्न को संक्षिप्त रूप से कैप्चर करता है और अधिक कुशल गणना के लिए भी अनुमति देता है। अधिक विस्तृत विवरण के लिए, 1.12 और 2.14 अक्सर पूछे जाने वाले प्रश्न पढ़ें।
बहु-मिलान पंक्तियों को संभालना
डिफ़ॉल्ट रूप से, के हर पंक्ति a
के मिलान प्रत्येक पंक्ति b
दिया जाता है:
a[b, on="id"]
# id x y
# 1: 1 11 -1
# 2: 1 12 -1
# 3: 2 13 -2
इसे mult
साथ mult
किया जा सकता है:
a[b, on="id", mult="first"]
# id x y
# 1: 1 11 -1
# 2: 2 13 -2
बेमिसाल पंक्तियों को संभालना
डिफ़ॉल्ट रूप से, की बेजोड़ पंक्तियों a
अभी भी परिणाम में दिखाई:
b[a, on="id"]
# id y x
# 1: 1 -1 11
# 2: 1 -1 12
# 3: 2 -2 13
# 4: 3 NA 14
# 5: NA NA 15
इन्हें छिपाने के लिए, nomatch
उपयोग nomatch
:
b[a, on="id", nomatch=0]
# id y x
# 1: 1 -1 11
# 2: 1 -1 12
# 3: 2 -2 13
ध्यान दें कि x[i]
में NAS मिलान करने का प्रयास i
।
गिनती के मैच लौट आए
i
की प्रत्येक पंक्ति के लिए मिलानों की संख्या की गणना करने के लिए .N
और by=.EACHI
उपयोग करें।
b[a, on="id", .N, by=.EACHI]
# id N
# 1: 1 1
# 2: 1 1
# 3: 2 1
# 4: 3 0
# 5: NA 0