2015-06-20 10 views
5

mi sono imbattuto in un file in questo modo:dati della colonna di lettura allineati con fread

COL1  COL2   COL3 
weqw  asrg   qerhqetjw 
weweg  ethweth  rqerhwrtjw 
rhqerhqerhq qergqer  qerhqew5h 
qerh  qergqer  wetjwryerj 

non ho potuto caricarlo direttamente con fread così ho sostituito \s+ da , con sed di quanto ho dato a fread e risolto. Ma c'è un modo per leggere questo tipo di dati con data.table?

+0

Come dire 'df <- read.table ('test.dat', header = T)'? – RHertel

risposta

3

fread non ha (ancora) capacità di lettura fixed-width files.

Anch'io, spesso trovo file archiviati fastidiosamente come questo. Sentiti libero di aggiungere una richiesta di funzionalità su Github page.

Potrebbe non essere così nel tuo caso, ma la tua soluzione con sed non funzionerebbe su un sacco di FWF che trovo perché non c'è spazio tra le colonne, ad es. vedrai stringhe come 00010 che in realtà comprendono 3 campi.

Se questo è il caso, avrete bisogno di un dizionario larghezza di campo, a questo punto sono disponibili diverse opzioni:

  1. read.fwf all'interno R
  2. Scrivi una fwf ->csv programma (io uso quello che ho ha scritto in Python ed è piuttosto veloce, potrebbe condividere il codice se lo desideri) - fondamentalmente la versione potenziata del tuo approccio iniziale, in modo che tu non debba mai più trattare con il FWF
  3. Aprilo in Excel/LibreOffice/eccetera; c'è un lettore FWF nativo che tenta (solitamente male) di indovinare la larghezza delle colonne, che almeno fa la metà del lavoro di specificare la larghezza delle colonne per te. Quindi puoi salvarlo come .csv o qualsiasi altra cosa da lì.

Personalmente utilizzo la seconda opzione più spesso. read.fwf non è ottimizzato come fread quindi sarà probabilmente lento. E se hai un sacco (diciamo 20+) di FWF da leggere, la terza opzione è piuttosto noiosa.

Ma sono d'accordo che sarebbe bello avere qualcosa di simile incorporato nel fread.

+0

Forse potresti condividere il tuo codice con Matt o Arun ... – statquant

+0

(una versione leggermente gonfia di) il codice può essere trovato in questo [mio repository] (https://github.com/MichaelChirico/wisconsin_teachers); non è niente di particolarmente nuovo, non penso ... – MichaelChirico

+1

@statquant, 'read_fwf' dal pacchetto" readr "sarebbe molto più veloce di' read.fwf' di base R. (anche se non sarà in grado di toccare la velocità di 'fread's). – A5C1D2H2I1M1N2O1R2T1

1

Corretto in corrente devel (v1.9.5) recentemente. Si prega di aggiornare e testare (e segnalare eventuali problemi).

require(data.table) # v1.9.5+ 
fread("~/Downloads/tmp.txt") 
#   COL1 COL2  COL3 
# 1:  weqw asrg qerhqetjw 
# 2:  weweg ethweth rqerhwrtjw 
# 3: rhqerhqerhq qergqer qerhqew5h 
# 4:  qerh qergqer wetjwryerj 

fread() guadagnato strip.white argomento (default = TRUE) tra altri argomenti. Si prega di controllare README sulla pagina del progetto per NEWS aggiornate.

Problemi correlati