2013-07-10 7 views
7

Vorrei poter saltare una colonna che viene letta in R tramite la funzione fread nella v1.8.9 tramite la data.table. Ma il CSV che sto leggendo, non ha intestazioni di colonne ... che sembra essere un problema per il fread ... c'è un modo per specificare solo che non voglio colonne specifiche?R usando fread colClasses o salta argomenti per leggere csv senza intestazioni di colonna

Sarebbe meglio solo pre-allocare un nome di colonna e poi lasciarlo leggere in modo che possa essere saltato?

Per fare un esempio ...

Ho scaricato i dati dal seguente URL

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

scompattato ...

e leggere il CSV in R utilizzando fread e ha praticamente lo stesso nome di file solo con l'estensione csv.

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> 

Ho provato utilizzando i nuovi colClasses (ish) o saltare argomenti di ignorare il fatto che la prima colonna è lo stesso ... ed è inutile.

ma facendo:

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

non omettere la lettura della prima colonna

e utilizzando colClasses conduce alla seguente errore

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 

altri tentativi 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> 

quasi esattamente come se non avessi usato colClasses ...

Ci sono dei suggerimenti per accelerare la lettura dei dati omettendo la prima colonna?

Forse anche un po 'da chiedere, ma è possibile leggere direttamente un file zip piuttosto che decomprimerlo prima e quindi leggere in csv?

Oh, e se non era chiaro sto usando v1.8.9 data.table

Come sempre, grazie per tutto il vostro aiuto, lo sforzo e la consulenza in anticipo.

+0

R in genere crea i propri nomi di colonna come sopra V1, V2 ecc. Quindi, se è possibile leggere i dati come sopra, non sono sicuro di quale sia il problema? Potresti provare a fare 'colClasses = NULL' senza dichiarare che è una lista. anche tu potresti inserire 'colClasses = c (col1, col2, col3, col4, col5)' –

+0

L'argomento 'skip' riguarda il saltare le righe e non le colonne; Non sono convinto che se ci fosse stato un argomento 'col.skip', avresti ottenuto un notevole miglioramento della velocità - dovresti ancora leggere in quei caratteri prima di decidere di abbandonarli – eddi

+0

@SanderVanderZeeuw Ho provato il tuo metodo .. .ma ottenuto il seguente errore: 'pp <- fread (" AUDUSD-2013-05.csv ", sep =", ", colClasses = c (NULL," carattere "," numerico "," numerico ")) '' Error in fread ("AUDUSD-2013-05.csv", settembre = "", colClasses = c (NULL, "carattere",: colClasses è senza nome e la lunghezza di 3, ma ci sono 4 colonne See.? data.table per maggiori informazioni sull'argomento colClasses. –

risposta

10

Penso che l'argomento che stai cercando sia drop. Prova:

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

noti che è possibile drop per nome o posizione.

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

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

E si può select per nome o posizione, troppo.

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

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

Questi argomenti sono stati aggiunti alla v1.9.2 (rilasciato a CRAN nel febbraio 2014) e sono documentati in ?fread. Dovrai aggiornare per usarli.

Problemi correlati