2013-04-25 11 views
9

मैं निम्नलिखित data.table (डीटी) है:डेटाटेबल में प्रोग्रामेटिक रूप से कॉलम का चयन कैसे करें?

DT <- data.table(V1 = 1:3, V2 = 4:6, V3 = 7:9) 

मैं चर प्रोग्राम के रूप में (गतिशील) का एक उपसमूह चुनने के लिए, एक वस्तु जहां प्रासंगिक चर नाम जमा हो जाती है का उपयोग करके चाहते हैं। उदाहरण के लिए, मैं हम चयन करने के लिए एक data.frame से कॉलम "रखना" थे, तो निम्न

keep <- c("V1", "V3") 

"रखना" दो कॉलम "वी 1" और "वी 3" एक चर में संग्रहीत चयन करना चाहते हैं होगा कार्य:

DT[keep] 

दुर्भाग्यवश, यह डेटाटेबल होने पर काम नहीं कर रहा है। मैंने सोचा था कि data.frame और data.table इस तरह के व्यवहार के समान हैं, लेकिन अपरिवर्तनीय रूप से वे नहीं हैं। कोई भी सही वाक्यविन्यास पर सलाह देने में सक्षम है?

उत्तर

14

यह FAQ 1.1, 1.2 and 2.17 में शामिल है।

कुछ संभावनाओं:

DT[, c('V1','V3'), with = FALSE] 
DT[, c(1,3), with = FALSE] 
DT[, list(V1,V3)] 

कारण DF[c('V1','V3')] काम करता है के रूप में यह एक data.frame के लिए करता है ?`[.data.frame`

डाटा फ्रेम में कवर किया जाता है विभिन्न प्रकारों में सूचीबद्ध किए जा सकते। जब [ और [[ का उपयोग एक एकल वेक्टर इंडेक्स (x[i] या x[[i]]) के साथ किया जाता है, तो वे डेटा फ्रेम को सूचीबद्ध करते हैं जैसे कि यह एक सूची थी। इस उपयोग में drop तर्क को चेतावनी के साथ अनदेखा किया जाता है।

जब j प्रतीक .. उपसर्ग के साथ यह फोन कर दायरे में ऊपर देखा जाएगा और अपने मूल्य के लिए लिया है:


data.table 1.10.2 से, आप .. उपसर्ग जब कॉलम प्रोग्राम के रूप में उपयोग कर सकते हैं subsetting स्तंभ नाम या संख्या हो [...] यह प्रयोगात्मक है।

इस प्रकार

:

DT[ , ..keep] 
# V1 V3 
# 1: 1 7 
# 2: 2 8 
# 3: 3 9 
संबंधित मुद्दे