2012-08-13 10 views
13

में कॉलम का सबसेट चुनना मैं डेटा तालिका dt के सभी कॉलम प्रिंट करना चाहता हूं, उनमें से एक को V3 नामित करना छोड़कर, लेकिन इसे संख्या से संदर्भित करना नहीं चाहता हूं।डेटा.table

df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10)) 
    df[,!(colnames(df)%in% c("X3"))] 

तो, मेरे सवाल है:

dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10)) 
    dt[,-3,with=FALSE] # Is this the only way to not print column "V3"? 

data frame तरह से उपयोग करना, एक कोड के माध्यम से ऐसा कर सकता है: वहाँ एक अन्य तरीका है एक स्तंभ मुद्रित नहीं करने के लिए इस कोड है कि मैं है किसी डेटा तालिका में इसे संख्या के संदर्भ के बिना आवश्यकता के बिना? मैं उपरोक्त उपयोग किए गए डेटा फ्रेम सिंटैक्स के समान कुछ ढूंढना चाहता हूं लेकिन डेटा तालिका का उपयोग करना चाहता हूं।

+0

संभावित डुप्लिकेट [डेटाटेबल आर में कॉलम का सबसेट चुनें] (https://stackoverflow.com/questions/28094645/select-subset-of-columns-in-data-table-r) – hhh

+0

@hhh सही डुप्लिकेट नहीं; इसे – Jaap

+0

@ जैप के आसपास दूसरी तरफ बंद किया जाना चाहिए, मुझे पता है लेकिन नए प्रश्न धागे की गुणवत्ता बेहतर है इसलिए मैंने दूसरे तरीके से मतदान किया। – hhh

उत्तर

26

एक data.frame के लिए के रूप में एक बहुत ही इसी तरह के वाक्य रचना का उपयोग करें, लेकिन तर्क with=FALSE जोड़ें:

dt[, setdiff(colnames(dt),"V9"), with=FALSE] 
    V1 V2 V3 V4 V5 V6 V7 V8 V10 
1: 1 1 1 1 1 1 1 1 1 
2: 0 0 0 0 0 0 0 0 0 
3: 1 1 1 1 1 1 1 1 1 
4: 0 0 0 0 0 0 0 0 0 
5: 0 0 0 0 0 0 0 0 0 
6: 1 1 1 1 1 1 1 1 1 

with=FALSE के उपयोग अच्छी तरह से ?data.table में j तर्क के लिए दस्तावेज में समझाया गया है:

जे: कॉलम नामों का एक एकल कॉलम नाम, एकल अभिव्यक्ति, list() कॉलम नामों, अभिव्यक्ति या फ़ंक्शन कॉल टी के अभिव्यक्तियों के टोपी सूची में मूल्यांकन करती है (data.frame और data.table जो सूचियां भी हैं), या (with=FALSE) [.data.frame में जे के समान ही है।


v1.10.2 के बाद से यह भी संभव है इस प्रकार यह करने के लिए:

keep <- setdiff(names(dt), "V9") 
dt[, ..keep] 

.. के साथ एक प्रतीक लगाकर गुंजाइश बुला (यानी वैश्विक पर्यावरण) में दिखेगा और इसका मूल्य स्तंभ नाम या संख्या (source) माना जाता है।

dt[, -grep("^V3$", names(dt)), with=FALSE] 

आप कहा "वी 3" बाहर रखा जाना था, सही:

9

यहाँ एक तरह से grep का उपयोग करता है सांख्यिक में बदल जाएंगे और नकारात्मक स्तंभ अनुक्रमण को अनुमति देनी है?

+0

हां। मैं '' V3'' को बाहर करना चाहता था। धन्यवाद! – Nestorghh

+0

यदि आप एक से अधिक कॉलम को बाहर करना चाहते हैं तो इस दृष्टिकोण को सफ़ेद करने के बारे में क्या[email protected] – Nestorghh

+2

regex-grep के साथ स्थितियों को जोड़ना बहुत आसान है। बस या प्रतीक "|" का प्रयोग करें। 'डीटी [, -ग्रेप ("^वी 3 $ |^वी 9 $ ", नाम (डीटी), = FALSE' के साथ –

7

शायद यह (मैं 1.9.6 का उपयोग कर रहा) data.table के हाल के संस्करणों में केवल है, लेकिन आप कर सकते हैं:

dt[, -'V3', with=FALSE] 

कई स्तंभ के लिए:

dt[, -c('V3', 'V9'), with=FALSE] 

ध्यान दें कि चर नामों के चारों ओर उद्धरण आवश्यक हैं।

संबंधित मुद्दे