2012-11-14 10 views
121

हम data.table में उनके संख्यात्मक सूचकांक (स्थिति) के वेक्टर का उपयोग करके एकाधिक कॉलम का चयन कैसे कर सकते हैं?उनके numeric सूचकांक द्वारा डेटा.table में एकाधिक कॉलम का चयन करें

यह है कि हम कैसे एक data.frame के साथ क्या होता है:

df <- data.frame(a = 1, b = 2, c = 3) 
df[ , 2:3] 
# b c 
# 1 2 3 

उत्तर

159

के संस्करणों data.table>= 1.9.8 के लिए, सभी निम्नलिखित बस काम:

library(data.table) 
dt <- data.table(a = 1, b = 2, c = 3) 

# select single column by index 
dt[, 2] 
# b 
# 1: 2 

# select multiple columns by index 
dt[, 2:3] 
# b c 
# 1: 2 3 

# select single column by name 
dt[, "a"] 
# a 
# 1: 1 

# select multiple columns by name 
dt[, c("a", "b")] 
# a b 
# 1: 1 2 

के संस्करणों के लिए डेटा.table< 1.9.8 (जिसके लिए संख्यात्मक कॉलम चयन आवश्यक है with = FALSE का उपयोग), इस उत्तर के this previous version देखें। यह भी देखें NEWS, v1.9.8/संभावित रूप से परिवर्तन परिवर्तन/बिंदु 2.

+0

कोई समस्या नहीं भी उपयोग कर सकते हैं। यह भी देखने के लिए कि वास्तव में एक सहायक विकल्प क्या है, यह देखने के लिए 'dt [," a "]' और 'dt [," a ", = fALSE] की तुलना करें। –

+2

बिना ऐसा करने के किसी भी तरीके से? उदाहरण के लिए 'डीटी [, सूची (बी: सी) ', क्योंकि मुझे सीधे डेटा तालिका में स्तंभों को बदलने के लिए सुविधाजनक लगता है, उदाहरण के लिए मैं' डीटी [, सूची (1/बी, 2 * सी)] 'कर सकता हूं, लेकिन यह साथ काम नहीं करता है। – jamborta

+0

आप .SDcols = 2: 3 या नामों के चरित्र वेक्टर का उपयोग कर सकते हैं। सुनिश्चित नहीं है कि उदाहरण के बारे में आपका क्या मतलब है – mnel

31

यह थोड़ा वर्बोज़ है, लेकिन मुझे छुपा .SD चर का उपयोग करने के लिए उपयोग किया गया है।

b<-data.table(a=1,b=2,c=3,d=4) 
b[,.SD,.SDcols=c(1:2)] 

यह एक परेशानी का एक सा है, लेकिन आप (मुझे नहीं लगता कि) अन्य data.table सुविधाओं से वंचित नहीं है, इसलिए यदि आप अभी भी टेबल आदि में शामिल होने जैसे अन्य महत्वपूर्ण कार्यों का उपयोग करने के लिए सक्षम होना चाहिए ।

+5

प्रोग्राम सूचीत्मक रूप से कॉलम सूची बनाते समय परेशानी और बहुत उपयोगी नहीं – Chris

33

आप स्तंभों का चयन करने के लिए स्तंभ नाम का उपयोग करने के लिए, बस .(), जो list() के लिए एक उपनाम है का उपयोग करना चाहते हैं:

library(data.table) 
dt <- data.table(a = 1:2, b = 2:3, c = 3:4) 
dt[ , .(b, c)] # select the columns b and c 
# Result: 
# b c 
# 1: 2 3 
# 2: 3 4 
1

@Tom, तो आप इस समाधान उनका कहना है के लिए बहुत बहुत धन्यवाद। यह मेरे लिए बहुत अच्छा काम करता है।

मैं प्रिंटिंग से और ऊपर दिए गए उदाहरण से केवल एक कॉलम को बाहर करने का एक तरीका ढूंढ रहा था। दूसरे कॉलम को बाहर करने के लिए आप इस

library(data.table) 
dt <- data.table(a=1:2, b=2:3, c=3:4) 
dt[,.SD,.SDcols=-2] 
dt[,.SD,.SDcols=c(1,3)] 
0

जैसे कुछ ऐसा कर सकते हैं, आप dplyr पैकेज पर भी विचार कर सकते हैं। यह एक अधिक सरल संरचना का उपयोग कर डेटा फ्रेम के हेरफेर की अनुमति देता है। एक उदाहरण का चयन करें आदेश का उपयोग मैं नाम से एक डेटा फ्रेम में केवल चर कि मैं चाहता हूँ

का चयन करें (.data, var1, var7, var12) प्राप्त कर सकते हैं होगा

Verbs used in dplyr

+0

प्रश्न डेटा तालिकाओं पर डेटा फ्रेम पर नहीं था। – jamborta

+1

dplyr पैकेज डेटा टेबल पर भी काम करता है (मुझे इसे देखना था और पोस्ट करने से पहले ऐसा करने के लिए मैं क्षमा चाहता हूं)। – Puddlebunk

4

v1 से। 10.2 बाद में, आप ..

dt <- data.table(a=1:2, b=2:3, c=3:4) 

keep_cols = c("a", "c") 

dt[, ..keep_cols] 
संबंधित मुद्दे