मुख्य सामग्री पर जाएं

data.table R ट्यूटोरियल: DT[i, j, by] का परिचय

मुफ़्त data.table R ट्यूटोरियल R के लिए data.table पैकेज की मूल बातें और सिंटैक्स समझाता है। अभी data.table सिंटैक्स में महारत हासिल करें।
अपडेट किया गया 25 सित॰ 2026  · 10 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

यह data.table R ट्यूटोरियल DT[i, j, by] कमांड की बुनियादी बातें समझाता है, जो data.table पैकेज का कोर है। यदि आप data.table पैकेज के बारे में और सीखना चाहते हैं, तो DataCamp data.table पैकेज पर एक इंटरैक्टिव R कोर्स प्रदान करता है। इस कोर्स में 35 से अधिक इंटरैक्टिव R अभ्यास हैं—जो सभी आपके ब्राउज़र में ही होते हैं—और कई वीडियो हैं जिनमें Matt Dowle, data.table पैकेज के मुख्य लेखक, और Arun Srinivasan, प्रमुख योगदानकर्ता, शामिल हैं। इसे मुफ़्त में आज़माएँ।

DataCamp द्वारा data.table R ट्यूटोरियल

यदि आपने पहले से RAM में बड़े डेटासेट्स (1 से 100GB से अधिक) के साथ काम किया है, तो आप जानते होंगे कि data.frame सीमित हो सकता है: कुछ कामों में बहुत समय लगता है। Data.table इसे कंप्यूटिंग समय घटाकर हल करता है। इससे भी बढ़कर, यह कम टाइपिंग में ज़्यादा करने में मदद करता है। जब आप इस data.table R ट्यूटोरियल से data.table का सिंटैक्स सीख लेते हैं, तो जटिल कार्यों को सरलता से करना आपको चकित कर देगा। यानी आप केवल कंप्यूटिंग समय ही नहीं, प्रोग्रामिंग समय भी बचाएँगे।

DT[i,j,by] कमांड के तीन भाग होते हैं: i, j और by। यदि आप SQL शब्दावली में सोचें, तो i WHERE के अनुरूप है, j SELECT के और by GROUP BY के। हम इस कमांड को इस तरह पढ़ते हैं: “DT लें, पंक्तियों को ‘i’ से सबसेट करें, फिर ‘by’ के अनुसार समूहित करके ‘j’ की गणना करें।” एक सरल उदाहरण में, और hflights डेटासेट का उपयोग करते हुए (ताकि आप सारे उदाहरण दोहरा सकें), यह देता है:

library(hflights)
library(data.table)
DT <- as.data.table(hflights)
DT[Month==10,mean(na.omit(AirTime)), by=UniqueCarrier]
UniqueCarrier V1
AA            68.76471
AS            255.29032
B6            176.93548
CO            141.52861
... 

जहाँ हमने डेटा टेबल को केवल वर्ष के 10वें महीने की पंक्तियों तक सीमित किया, उन विमानों का औसत AirTime निकाला जो वास्तव में उड़े थे (इसीलिए na.omit() का उपयोग किया गया है; रद्द हुई उड़ानों में AirTime का मान नहीं होता) और फिर परिणामों को उनके Carrier के अनुसार समूहित किया। उदाहरण के लिए, हम देख सकते हैं कि AA (American Airlines) का औसत AirTime, AS (Alaska Airlines) की तुलना में बहुत कम है। क्या आपने यह भी नोटिस किया कि R की बेस फ़ंक्शंस को j भाग में उपयोग किया जा सकता है? हम इस पर आगे आएँगे।

The i Part

‘i’ भाग का उपयोग पंक्तियों को सबसेट करने के लिए होता है, ठीक उसी तरह जैसे किसी डेटा फ़्रेम में।

DT[2:5]
 #selects the second to the fifth row of DT
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime AirTime
2011 1     2          7         1401    1501    AA            428       N557AA  60                45
2011 1     3          1         1352    1502    AA            428       N541AA  70                48
2011 1     4          2         1403    1513    AA            428       N403AA  70                39
2011 1     5          3         1405    1507    AA            428       N492AA  62                44

ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
-9       1        IAH    DFW  224      6      9       0                          0
-8      -8        IAH    DFW  224      5      17      0                          0
 3       3        IAH    DFW  224      9      22      0                          0
-3       5        IAH    DFW  224      9      9       0                          0

पर आप कॉलम नाम भी उपयोग कर सकते हैं, क्योंकि वे DT के स्कोप में इवैल्यूएट होते हैं।

DT[UniqueCarrier=="AA"]
#Returns all those rows where the Carrier is American Airlines
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime
2011 1     1          6         1400    1500    AA            428       N576AA  60
2011 1     2          7         1401    1501    AA            428       N557AA  60
2011 1     3          1         1352    1502    AA            428       N541AA  70
2011 1     4          2         1403    1513    AA            428       N403AA  70
2011 1     5          3         1405    1507    AA            428       N492AA  62
---
2011 12    27         2         1021    1333    AA            2234      N3ETAA  132
2011 12    28         3         1015    1329    AA            2234      N3FJAA  134
2011 12    29         4         1023    1335    AA            2234      N3GSAA  132
2011 12    30         5         1024    1334    AA            2234      N3BAAA  130
2011 12    31         6         1024    1343    AA            2234      N3HNAA  139
AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
40      -10       0       IAH    DFW  224       7     13      0                          0
45       -9       1       IAH    DFW  224       6      9      0                          0
48       -8      -8       IAH    DFW  224       5     17      0                          0
39        3       3       IAH    DFW  224       9     22      0                          0
44       -3       5       IAH    DFW  224       9      9      0                          0
---
112     -12       1       IAH    MIA  964       8     12      0                          0
112     -16      -5       IAH    MIA  964       9     13      0                          0
110     -10       3       IAH    MIA  964      12     10      0                          0
110     -11       4       IAH    MIA  964       9     11      0                          0
119      -2       4       IAH    MIA  964       8     12      0                          0 

ध्यान दें कि डेटा टेबल में पंक्तियों का सबसेट बनाते समय आपको कॉमा लगाने की ज़रूरत नहीं है। किसी data.frame में DF[2:5] करने से 2वें से 5वें कॉलम की सभी पंक्तियाँ मिलेंगी। इसके बजाय (जैसा कि यह पढ़ने वाला हर कोई जानता है), हमें DF[2:5,] निर्दिष्ट करना पड़ता है। यह भी नोट करें कि data.table के लिए DT[,2:5] का कोई अर्थ नहीं है, जैसा कि data.table पैकेज के FAQs के पहले प्रश्न में समझाया गया है।

दिलचस्प और उपयोगी: पंक्तियों का सबसेट बनाते समय आप DT[…] कमांड में प्रतीक .N भी उपयोग कर सकते हैं, जो पंक्तियों की संख्या या अंतिम पंक्ति को दर्शाता है। आप इसका उपयोग अंतिम पंक्ति या उससे ऑफ़सेट चुनने के लिए कर सकते हैं।

DT[.N-1]
#Returns the penultimate row of DT
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime AirTime
2011 12    6          2         656     812     WN            621       N727SW  76                64
ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
-13      -4       HOU    TUL  453      3      9       0                          0 

The j Part

‘j’ भाग का उपयोग कॉलम चुनने और उनके साथ काम करने के लिए होता है। और काम का अर्थ सचमुच कुछ भी हो सकता है। तरह-तरह के फ़ंक्शंस उपयोग किए जा सकते हैं, जो data.table पैकेज की बड़ी ताकत है।

DT[, mean(na.omit(ArrDelay))] 
[1] 7.094334

ध्यान दें कि 'i' भाग खाली छोड़ा गया है, और कोष्ठकों में पहली चीज़ कॉमा है। यह पहले थोड़ा अटपटा लग सकता है। हालांकि, इसका सीधा अर्थ है कि हम किसी भी पंक्ति पर सबसेट नहीं कर रहे हैं, यानी सभी पंक्तियाँ चुनी जाती हैं। 'j' भाग में, सभी उड़ानों पर आगमन के समय औसत देरी की गणना की जाती है। लगता है कि hflights डेटासेट में औसतन विमानों में 7 मिनट से अधिक की देरी थी। अगली उड़ान पकड़ते समय तैयार रहें!

जब 'j' भाग में कई कॉलम चुनकर उन पर काम करना हो, तो आपको ‘.()’ नोटेशन का उपयोग करना होता है। यह नोटेशन वास्तव में ‘list()’ का उपनाम है। यह एक डेटा टेबल लौटाता है, जबकि ‘.()’ न उपयोग करने पर केवल एक वेक्टर लौटता है, जैसा कि ऊपर दिखाया गया है।

DT[, .(mean(na.omit(DepDelay)), mean(na.omit(ArrDelay)))] 
V1       V2
9.444951 7.094334

एक और उपयोगी फ़ीचर, जिसके लिए ‘.()’ नोटेशन चाहिए, आपको DT[…] कमांड के अंदर कॉलम का नाम बदलने देता है।

DT[, .(Avg_ArrDelay =
mean(na.omit(ArrDelay)))]
Avg_ArrDelay
7.094334
DT[, .(Avg_DepDelay = mean(na.omit(DepDelay)),
avg_ArrDelay = mean(na.omit(ArrDelay)))] 
Avg_DepDelay Avg_ArrDelay
9.444951     7.094334

बेशक, नए कॉलम नाम रखना अनिवार्य नहीं है।

ऊपर ‘i’ और ‘j’ के बारे में जो बताया गया, उसे मिलाकर यह मिलता है:

DT[UniqueCarrier=="AA", .(Avg_DepDelay =
mean(na.omit(DepDelay)),
Avg_ArrDelay = mean(na.omit(ArrDelay)),
plot(DepTime,DepDelay,ylim=c(-15,200)),
abline(h=0))]
Avg_DepDelay Avg_ArrDelay V3    V4
6.390144     0.8917558    NULL  NULL

DepDelay DepTime ग्राफ़

यहाँ हमने DT लिया, 'i' भाग में वे सभी पंक्तियाँ चुनीं जहाँ कैरियर AA था, औसत प्रस्थान देरी और आगमन देरी की गणना की, और 'j' भाग में प्रस्थान समय के विरुद्ध प्रस्थान देरी का प्लॉट बनाया।

संक्षेप में, ‘j’ भाग का उपयोग वहीं निर्दिष्ट कॉलम पर गणनाएँ करने के लिए होता है। क्योंकि डेटा टेबल के कॉलम वैरिएबल्स माने जाते हैं, और ‘j’ के हिस्से एक्सप्रेशंस के रूप में इवैल्यूएट होते हैं, ‘j’ भाग में लगभग कुछ भी किया जा सकता है। इससे आपका प्रोग्रामिंग समय काफी कम हो जाता है।

The by part

इस data.table R ट्यूटोरियल का अंतिम खंड ‘by’ भाग पर केंद्रित है। ‘by’ भाग तब उपयोग होता है जब हम किसी विशिष्ट वैरिएबल (या उसके किसी रूपांतरण) के अनुसार समूहित करके ‘j’ भाग की गणना करना चाहते हैं। आप देखेंगे कि प्रत्येक 'by' समूह के लिए ‘j’ एक्सप्रेशन दोहराया जाता है। इसका उपयोग सरल है: आप 'by' आर्गुमेंट में उस कॉलम को निर्दिष्ट कर दें जिसके अनुसार समूह बनाना है।

DT[,mean(na.omit(DepDelay)),by=Origin] 
Origin  V1
IAH     8.436951
HOU    12.837873 

यहाँ, हमने प्रस्थान से पहले औसत देरी की गणना की, लेकिन उसे विमान के प्रस्थान स्थल के अनुसार समूहित किया। लगता है कि HOU से उड़ने वाली उड़ानों में IAH से उड़ने वालों की तुलना में औसत देरी अधिक है।

'j' भाग की तरह ही, आप 'by' भाग में भी बहुत सा काम कर सकते हैं। 'by' भाग में फ़ंक्शंस का उपयोग किया जा सकता है ताकि ‘j’ भाग में किए गए ऑपरेशन्स के परिणाम DT[…] कमांड के अंदर हमने जो निर्दिष्ट किया है, उसके अनुसार समूहित हों। DT[…] के अंदर फ़ंक्शंस का उपयोग उस एक पंक्ति को बहुत शक्तिशाली बना देता है। इसी तरह, जब 'by' भाग में कई कॉलम उपयोग करने हों, तो ‘.()’ नोटेशन का उपयोग करना होगा।

DT[,.(Avg_DepDelay_byWeekdays = mean(na.omit(DepDelay))), by=.(Origin,Weekdays = DayOfWeek<6)] 
Origin Weekdays Avg_DepDelay_byWeekdays
IAH    FALSE     8.286543
IAH    TRUE      8.492484
HOU    FALSE    10.965384
HOU    TRUE     13.433994

यहाँ, पहले सभी विमानों (क्योंकि 'i' भाग में कोई सबसेटिंग नहीं, इसलिए सभी पंक्तियाँ चुनी गईं) के प्रस्थान से पहले औसत देरी की गणना की गई, और फिर समूह बनाए गए—पहले विमान के प्रस्थान स्थल के अनुसार और फिर सप्ताह के दिन के अनुसार। सप्ताहांत में Weekdays का मान False होता है। लगता है कि जब विमान HOU से उड़ा, तो प्रस्थान से पहले औसत देरी IAH की तुलना में अधिक थी, और चौंकाने वाली बात यह है कि सप्ताहांत में देरी कम थी।

सब कुछ मिलाकर, एक सामान्य DT[i,j,by] कमांड यह देता है:

DT[UniqueCarrier=="DL", .(Avg_DepDelay =
mean(na.omit(DepDelay)),
Avg_ArrDelay = mean(na.omit(ArrDelay)),
Compensation = mean(na.omit(ArrDelay - DepDelay))), by = .(Origin, Weekdays = DayOfWeek<6)]
Origin Weekdays Avg_DepDelay Avg_ArrDelay Compensation
IAH    FALSE     8.979730     4.116751    -4.825719
HOU    FALSE     7.120000     2.656566    -4.555556
IAH    TRUE      9.270948     6.281941    -2.836609
HOU    TRUE     11.631387    10.406593    -1.278388

यहाँ Delta Air Lines द्वारा संचालित विमानों के सबसेट (जो 'i' में चुना गया) को उनके प्रस्थान स्थल और Weekdays के अनुसार (जो 'by' में है) समूहित किया गया। हवा में रहते हुए जो समय “कॉम्पेन्सेट” हुआ, उसकी भी गणना की गई (जो 'j' में है)। लगता है कि सप्ताहांत में, चाहे विमान IAH से आया हो या HOU से, हवा में रहते हुए कॉम्पेन्सेट किया गया समय (यानी तेज़ उड़ान भरकर) अधिक है।

data.table पैकेज में जानने को और भी बहुत कुछ है, पर इस पोस्ट ने बुनियादी DT[i,j,by] कमांड को दिखाया है। DataCamp कोर्स पूरे data.table पैकेज को विस्तार से समझाता है। आप अपने ब्राउज़र में अपनी गति से अभ्यास कर सकते हैं, संकेत और फ़ीडबैक पा सकते हैं, और वीडियोज़ व स्लाइड्स जितनी बार चाहें, रिव्यू कर सकते हैं। यह इंटरैक्टिव सीखने का तरीका आपको डेटा टेबल्स के साथ गहन ज्ञान और व्यावहारिक अनुभव देता है। इसे मुफ़्त में आज़माएँ। DataCamp का data.table R पैकेज चीट शीट भी देखें।

उम्मीद है कि इस data.table R ट्यूटोरियल की बदौलत अब आप data.table के मूलभूत सिंटैक्स को समझते हैं और खुद प्रयोग करने के लिए तैयार हैं। यदि data.table पैकेज से संबंधित आपके प्रश्न हैं, तो यहाँ देखें। Matt और Arun बहुत सक्रिय हैं। data.table पैकेज पर अगली ब्लॉगपोस्ट्स में हम और तकनीकी पहलुओं पर बात करेंगे, और डेटा टेबल्स की व्यापक संभावनाओं पर ज़ूम करेंगे। जुड़े रहें!

विषय
R

R के बारे में और जानें

{count, plural, one {कोर्स} other {कोर्स}}

R में data.table के साथ Data Manipulation

{hours} घंटा
26.5K
data.table का उपयोग करके फ़िल्टरिंग, चयन और समूह-वार सांख्यिकी की गणना जैसे डेटा हेरफेर के मुख्य अवधारणाएँ सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

{count, plural, one {कोर्स} other {कोर्स}}

R में डेटा इम्पोर्ट करने का परिचय

{hours} घंटा
210.5K
इस पाठ्यक्रम में, आप readxl और data.table जैसे टूल्स का उपयोग करके R में CSV, XLS और टेक्स्ट फ़ाइलें पढ़ना सीखेंगे।
और देखेंRight Arrow