5 utili opzioni in R data.table's fread

Come tutte le funzioni nel pacchetto R data.table, fread è veloce. Molto veloce. Ma c'è molto di più che velocità. Ha diverse funzioni e opzioni utili durante l'importazione di dati esterni in R. Qui ci sono cinque delle più utili.

Nota: se desideri seguire, scarica il file CSV del New York Times dei casi Covid-19 quotidiani della contea degli Stati Uniti all'indirizzo //github.com/nytimes/covid-19-data/raw/master/us-counties. csv.

Usa l'opzione nrows di Fread

Il tuo file è grande? Vorresti esaminarne la struttura prima di importare il tutto, senza doverlo aprire in un editor di testo o in Excel? Usa l' nrowsopzione di fread per importare solo una parte di un file per l'esplorazione .

Il codice seguente importa solo le prime 10 righe del CSV.

mydt10 <- fread ("us-counties.csv", nrows = 10)

Se vuoi solo vedere i nomi delle colonne senza alcun dato, puoi usare nrows = 0

Usa l'opzione di selezione di Fread

Una volta che conosci la struttura del file, puoi scegliere quali colonne importare . L' selectopzione di fread ti consente di scegliere le colonne che desideri mantenere. selectaccetta un vettore di nomi di colonna o numeri di posizione di colonna . Se i nomi devono essere tra virgolette, come la maggior parte dei vettori di stringhe di caratteri:

mydt <- fread ("us-counties.csv",

select = c ("data", "contea", "stato", "casi"))

Come sempre, i numeri non hanno bisogno di virgolette:

mydt <- fread ("us-counties.csv", select = c (1,2,3,5))

Puoi usare un oggetto R con un vettore di nomi di colonne all'interno di fread, come puoi vedere in questo prossimo gruppo di codice. Creo un vettore my_cols con data, contea, stato e casi; quindi uso quel vettore all'interno di fread.

my_cols <- c ("data", "contea", "stato", "casi")

mydt <- fread ("us-counties.csv", select = my_cols)

L'opposto di selectè drop. Puoi scegliere di importare tutte le colonne tranne quelle specificate con drop, ad esempio:

mydt <- fread ("us-counties.csv", drop = c ("fips", "deaths"))

Come con select, dropprende un vettore di nomi di colonne o posizioni numeriche. 

Usa fread con grep

Se hai familiarità con Unix, puoi  eseguire strumenti da riga di comando direttamente da fread . Ad esempio, se volessi solo i dati della California, potrei usare grep per importare solo le righe che contengono il testo "California". Nota che questo cerca ogni riga intera come una stringa di testo, non una colonna specifica, quindi i tuoi dati devono essere in un formato che abbia senso.

ca <- fread ("grep California us-counties.csv")

Sfortunatamente, grep non comprende i nomi delle colonne del file originale, quindi finisci con i nomi predefiniti.

head (ca) V1 V2 V3 V4 V5 V6 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020 -01-27 Los Angeles California 6037 1 0 5: 2020-01-27 Orange California 6059 1 0 6: 2020-01-28 Los Angeles California 6037 1 0

Tuttavia, fread ci consente di specificare i nomi delle colonne con l' col.namesopzione. Posso impostare i nomi in base ai nomi di mydt10 che ho creato sopra.

capo ca (ca) data contea stato fips casi decessi 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020-01-27 Los Angeles California 6037 1 0 5: 2020-01-27 Orange California 6059 1 0 6: 2020-01-28 Los Angeles California 6037 1 0

Possiamo anche usare espressioni regolari, con l' -Eopzione di grep , che ci permette di fare ricerche più complesse, come cercare quattro stati contemporaneamente. 

states4 <- fread (cmd = "grep -E 'Texas | Arizona | Florida | South Carolina' us-counties.csv",

col.names = nomi (mydt10))

Ancora una volta, un promemoria: questo sta cercando ciascuno di quei nomi di stato ovunque nella riga , non solo nella colonna di stato. Se esegui il codice sopra e controlli quali stati sono inclusi nei risultati unique(states4$state), vedrai Oklahoma e Missouri nella colonna degli stati insieme a Texas, Arizona, Florida e Carolina del Sud. Questo perché sia ​​l'Oklahoma che il Missouri hanno contee chiamate Texas.

Quindi, grep durante l'importazione di file è un modo per filtrare molti dati che non vuoi da un insieme di dati molto grande; ma non ti garantisce di ottenere solo ciò che desideri. Dopo questo tipo di importazione, dovresti comunque filtrare in modo specifico i dati della colonna per assicurarti di non ottenere nulla di imprevisto.

Usa l'opzione colClasses di fread

Puoi impostare le classi di colonna durante l'importazione , solo per poche colonne, non per tutte. Ad esempio, la colonna della data in questi dati arriva come stringhe di caratteri, anche se è nel formato anno-mese-giorno. È possibile impostare la colonna denominata data sul tipo di dati Data  durante l'importazione utilizzando l' colClassesopzione. 

mydt <- fread ("us-counties.csv", colClasses = c ("date" = "Date"))

Ora, le date sono date.

> str (mydt) Classi 'data.table' e 'data.frame': 322651 obs. di 6 variabili: $ date: Data, formato: "2020-01-21" "2020-01-22" "2020-01-23" ... $ county: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ state: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ case: int 1 1 1 1 1 1 1 1 1 1 ... $ morti: int 0 0 0 0 0 0 0 0 0 0 ...

Usa fread sui file compressi

Puoi importare un file zippato senza prima decomprimerlo . fread può importare direttamente file gz e bz2, come  mydt <- fread("myfile.gz"). Se è necessario importare un file zip, è possibile decomprimerlo con il unzipcomando di sistema all'interno di fread, utilizzando la sintassi  mydt <- fread(cmd = 'unzip -cq myfile.zip').

Per ulteriori suggerimenti su R, vai alla pagina Fai di più con R.