2013-07-10 5 views
7

के साथ सीएसवी पढ़ने के लिए तर्क छोड़ें मैं v1.8.9 में data.table के fread फ़ंक्शन के माध्यम से आर में पढ़ा गया एक कॉलम छोड़ने में सक्षम होना चाहता हूं। लेकिन जिस सीएसवी में मैं पढ़ रहा हूं, उसके पास कोई कॉलम हेडर नहीं है ... जो कि फ़्रेड के लिए एक समस्या प्रतीत होता है ... क्या यह निर्दिष्ट करने का एक तरीका है कि मैं विशिष्ट कॉलम नहीं चाहता हूं?आर फ्रेड colClasses का उपयोग करके या कोई कॉलम हेडर

क्या कॉलम नाम को पूर्व-आवंटित करना बेहतर होगा और फिर इसे पढ़ने दें ताकि इसे छोड़ा जा सके?

एक उदाहरण देना करने के लिए ...

मैं निम्न URL

http://www.truefx.com/dev/data/2013/MAY-2013/AUDUSD-2013-05.zip

यह अनज़िप से डेटा डाउनलोड किया ...

और fread का उपयोग कर अनुसंधान में सीएसवी पढ़ सकते हैं और यह बहुत ज्यादा है सीएसवी एक्सटेंशन के साथ एक ही फ़ाइल नाम।

system.time(pp <- fread("AUDUSD-2013-05.csv",sep=",")) 
    user system elapsed 
16.427 0.257 16.682 

head(pp) 
     V1     V2  V3  V4 
1: AUD/USD 20130501 00:00:04.728 1.03693 1.03721 
2: AUD/USD 20130501 00:00:21.540 1.03695 1.03721 
3: AUD/USD 20130501 00:00:33.789 1.03694 1.03721 
4: AUD/USD 20130501 00:00:37.499 1.03692 1.03724 
5: AUD/USD 20130501 00:00:37.524 1.03697 1.03719 
6: AUD/USD 20130501 00:00:39.789 1.03697 1.03717 

str(pp) 
Classes ‘data.table’ and 'data.frame': 4060762 obs. of 4 variables: 
$ V1: chr "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ... 
$ V2: chr "20130501 00:00:04.728" "20130501 00:00:21.540" "20130501 00:00:33.789" "20130501 00:00:37.499" ... 
$ V3: num 1.04 1.04 1.04 1.04 1.04 ... 
$ V4: num 1.04 1.04 1.04 1.04 1.04 ... 
- attr(*, ".internal.selfref")=<externalptr> 

मैं इस तथ्य की अनदेखी करने के कि पहले कॉलम सभी एक ही है ... और अनावश्यक है नया (ish) colClasses का उपयोग कर या तर्क को छोड़ करने की कोशिश की।

लेकिन कर रही:

pp1 <- fread("AUDUSD-2013-05.csv",sep=",",skip=1) 

पहले कॉलम

की में पढ़ने को छोड़ नहीं करता है और का उपयोग कर colClasses निम्न त्रुटि की ओर जाता है

pp1 <- fread("AUDUSD-2013-05.csv",sep=",",colClasses=list(NULL,"character","numeric","numeric")) 

Error in fread("AUDUSD-2013-05.csv", sep = ",", colClasses = list(NULL, : 
colClasses is type list but has no names 

अन्य प्रयास incude

pp1 <- fread("AUDUSD-2013-06.csv",sep=",", colClasses=c(V1=NULL,V2="character",V3="numeric",V4="numeric")) 
str(pp1) 
Classes ‘data.table’ and 'data.frame': 5524877 obs. of 4 variables: 
$ V1: chr "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ... 
$ V2: chr "20130603 00:00:00.290" "20130603 00:00:00.291" "20130603 00:00:00.292" "20130603 00:00:03.014" ... 
$ V3: num 0.962 0.962 0.962 0.962 0.962 ... 
$ V4: num 0.962 0.962 0.962 0.962 0.962 ... 
- attr(*, ".internal.selfref")=<externalptr> 

i.e काफी सुंदर है जैसे कि मैंने colClasses का उपयोग नहीं किया था ...

क्या पहले कॉलम को छोड़कर डेटा में पढ़ने को गति देने में सक्षम होने के लिए कोई सुझाव हैं?

शायद यह पूछने के लिए थोड़ा सा है, लेकिन क्या यह पहले इसे अनजिप करने और फिर सीएसवी में पढ़ने के बजाय ज़िप फ़ाइल को पढ़ना संभव है?

ओह और अगर यह स्पष्ट नहीं था मैं data.table v1.8.9 उपयोग कर रहा हूँ

हमेशा की तरह, तुम्हारी मदद की, प्रयास और पहले से सलाह के सभी के लिए धन्यवाद।

+0

आर आमतौर पर अपने स्वयं के कॉलम नाम बनाता है जैसे आपके पास V1, V2 आदि से ऊपर है। तो यदि आप उपरोक्त डेटा में पढ़ सकते हैं तो मुझे यकीन नहीं है कि समस्या क्या है? आप इसे एक सूची घोषित किए बिना 'colClasses = NULL' करने का प्रयास कर सकते हैं। आप 'colClasses = c (col1, col2, col3, col4, col5) भर सकते हैं' –

+0

'skip' तर्क पंक्तियों को छोड़ने वाली पंक्तियों को छोड़ने के बारे में है; मुझे विश्वास नहीं है कि 'col.skip' तर्क था, आपको एक उल्लेखनीय गति सुधार मिलेगा - आपको उन्हें – eddi

+0

@SanderVanderZeeuw को छोड़ने का निर्णय लेने से पहले उन वर्णों में अभी भी पढ़ना होगा, मैंने आपकी विधि की कोशिश की .. लेकिन निम्नलिखित त्रुटि मिली: 'पीपी <- फ़्रेड (" AUDUSD-2013-05.csv ", sep =", ", colClasses = c (NULL," character "," numeric "," numeric ")) ' ' फ़्रेड में त्रुटि ("AUDUSD-2013-05.csv", sep = ",", colClasses = c (NULL, "character", colClasses का नाम और लंबाई 3 है लेकिन 4 कॉलम हैं। देखें? colClasses तर्क के बारे में अधिक जानकारी के लिए data.table। –

उत्तर

10

मुझे लगता है कि आप जो तर्क खोज रहे हैं वह drop है। प्रयास करें:

require(data.table) # 1.9.2+ 
pp <- fread("AUDUSD-2013-05.csv", drop = 1) 

ध्यान दें कि आप कर सकते हैं drop नाम या स्थिति के द्वारा।

fread("AUDUSD-2013-05.csv", drop = c("columThree","anotherColumnName")) 

fread("AUDUSD-2013-05.csv", drop = 10:15) # read all columns other than 10:15 

और आप select नाम या स्थिति से भी कर सकते हैं।

fread("AUDUSD-2013-05.csv", select = 10:15) # read only columns 10:15 

fread("AUDUSD-2013-05.csv", select = c("columnA","columnName2")) 

इन तर्कों v1.9.2 (फरवरी 2014 में क्रैन के लिए जारी किया) को जोड़ा गया था और ?fread में दर्ज कर रहे हैं। आपको उनका उपयोग करने के लिए अपग्रेड करना होगा।

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