Ho un csv che comprende circa 2 milioni di righe di stringhe data nel formato:Speedup conversione di 2 milioni di righe di stringhe di data per POSIX.ct
2012/11/13 21:10:00
Consente chiamata che csv$Date.and.Time
I voglio convertire queste date (e i loro dati di accompagnamento) a xts il più velocemente possibile
Ho scritto uno script che esegue la conversione bene (vedi sotto), ma è terribilmente lento e mi piacerebbe velocizzare questoil più possibile.
Ecco la mia attuale metodologia. Qualcuno ha qualche suggerimento su come farlo più veloce?
dt <- as.POSIXct(csv$Date.and.Time,tz="UTC")
idx <- format(dt,tz=z,usetz=TRUE)
Quindi lo script converte queste stringhe di data a POSIX.ct
. Quindi esegue una conversione del fuso orario utilizzando format
(z
è una variabile che rappresenta la TZ a cui sto convertendo). Faccio quindi una normale chiamata xts
per rendere questa una serie xts con il resto dei dati nel csv.
Questo funziona al 100%. È solo molto, molto lento. Ho provato a farlo funzionare in parallelo (non fa nulla, se non altro lo rende peggiore). Cosa intendo con "lento"?
user system elapsed
155.246 16.430 171.650
Questo è su un 3GhZ, ram 16 GB 2012 mb pro. Ne posso ricavare circa la metà su un processore simile con 32 GB di RAM su una macchina Win7
Sono sicuro che qualcuno ha un'idea migliore - Sono aperto ai suggerimenti tramite Rcpp
ecc. Tuttavia, idealmente la soluzione funziona con csv piuttosto che qualche altro metodo, come la creazione di un database. Detto questo, ho intenzione di farlo tramite qualunque metodo fornirà la conversione più veloce.
Sarei molto grato di qualsiasi aiuto. Grazie in anticipo.
Sapete qual è il passo che rallenta le cose: il passo 'as.POSIXct', il passo' format' o 'xts'? –
Se cerchi fasttime (che non avresti saputo di fare senza la risposta di Dirk), troverai un paio di Qs simili [LINK1] (http://stackoverflow.com/questions/12898318/convert-character-to -date-quickly-in-r), [LINK2] (http://stackoverflow.com/questions/12786335/why-is-as-adate-slow-on-a-character-vector) – GSee