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.
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)' –
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
@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. –