data.table
समूह द्वारा पंक्तियों को तोड़ना
खोज…
टिप्पणियों
एक अनुस्मारक: DT[where, select|update|do, by]
सिंटैक्स का उपयोग डेटा के स्तंभ के साथ काम करने के लिए किया जाता है।
- "जहां" भाग
i
तर्क है - "सेलेक्ट | अपडेट | डू" पार्ट
j
तर्क है
इन दो तर्कों को आमतौर पर नाम के बजाय स्थिति से पारित किया जाता है।
प्रत्येक समूह के भीतर पंक्तियों का चयन करना
# example data
DT <- data.table(Titanic)
मान लीजिए कि, प्रत्येक सेक्स के लिए, हम उच्चतम जीवित संख्या के साथ पंक्तियाँ चाहते हैं:
DT[Survived == "Yes", .SD[ N == max(N) ], by=Sex]
# Class Sex Age Survived N
# 1: Crew Male Adult Yes 192
# 2: 1st Female Adult Yes 140
.SD
प्रत्येक Sex
जुड़े डेटा का सबसेट है; और हम इस स्थिति को और कम कर रहे हैं, जो हमारी स्थिति को पूरा करती है। यदि गति महत्वपूर्ण है, तो इसके बजाय SO पर eddi द्वारा सुझाए गए दृष्टिकोण का उपयोग करें:
DT[ DT[Survived == "Yes", .I[ N == max(N) ], by=Sex]$V1 ]
# Class Sex Age Survived N
# 1: Crew Male Adult Yes 192
# 2: 1st Female Adult Yes 140
नुकसान
कोड की अंतिम पंक्ति में, .I
पूर्ण डेटा की पंक्ति संख्या को संदर्भित करता है। हालाँकि, यह सच नहीं है, जब कोई इसके साथ नहीं by
:
DT[ Survived == "Yes", .I]
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DT[ Survived == "Yes", .I, by=Sex]$I
# 17 18 19 20 25 26 27 28 21 22 23 24 29 30 31 32
समूहों का चयन करना
# example data
DT = data.table(Titanic)
मान लीजिए कि हम केवल दूसरी श्रेणी देखना चाहते हैं:
DT[ Class == "2nd" ]
# Class Sex Age Survived N
# 1: 2nd Male Child No 0
# 2: 2nd Female Child No 0
# 3: 2nd Male Adult No 154
# 4: 2nd Female Adult No 13
# 5: 2nd Male Child Yes 11
# 6: 2nd Female Child Yes 13
# 7: 2nd Male Adult Yes 14
# 8: 2nd Female Adult Yes 80
यहां, हम केवल i
, "जहां" क्लॉज का उपयोग करके डेटा को सब्मिट करते हैं।
शर्त के आधार पर समूहों का चयन करना
# example data
DT = data.table(Titanic)
मान लीजिए कि हम प्रत्येक वर्ग को केवल तभी देखना चाहते हैं जब बहुमत बच गया:
DT[, if (sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) .SD, by=Class]
# Class Sex Age Survived N
# 1: 1st Male Child No 0
# 2: 1st Female Child No 0
# 3: 1st Male Adult No 118
# 4: 1st Female Adult No 4
# 5: 1st Male Child Yes 5
# 6: 1st Female Child Yes 1
# 7: 1st Male Adult Yes 57
# 8: 1st Female Adult Yes 140
यहाँ, हम उप-समूह की डेटा वापस .SD
केवल तभी हमारी स्थिति उत्पन्न होने पर। एक विकल्प है
DT[, .SD[ sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) ], by=Class]
लेकिन यह कभी-कभी धीमा साबित हुआ है।