Programmering

5 praktiske alternativer i R data.table's fread

Som alle funksjonene i data.table R-pakken, er fread rask. Veldig fort. Men det er mer å frede enn fart. Den har flere nyttige funksjoner og alternativer når du importerer eksterne data til R. Her er fem av de mest nyttige.

Merk: Hvis du vil følge med, laster du ned New York Times CSV-fil med daglige Covid-19-saker fra USAs fylke på //github.com/nytimes/covid-19-data/raw/master/us-counties. csv.

Bruk fread's nrows-alternativet

Er filen din stor? Vil du undersøke strukturen før du importerer det hele - uten må du åpne den i en tekstredigerer eller Excel? Bruk fread’s nrows alternativ til importer bare en del av en fil for utforskning.

Koden nedenfor importerer bare de første 10 radene av CSV.

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

Hvis du bare vil se kolonnenavn uten data i det hele tatt, kan du bruke nr. = 0

Bruk fread's select-alternativet

Når du kjenner filstrukturen, kan du velg hvilke kolonner du vil importere. fread’s å velge alternativet lar deg velge kolonner du vil beholde. å velge tar en vektor av begge kolonnene navn eller kolonneposisjon tall. Hvis navn, må de være i anførselstegn, som de fleste vektorer med tegnstrenger:

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

select = c ("date", "county", "state", "cases"))

Som alltid trenger tall ikke anførselstegn:

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

Du kan bruke et R-objekt med en vektor med kolonnenavn inne i fread, som du kan se i denne neste gruppen av koder. Jeg lager en vektor mine_koler med dato, fylke, stat og saker; så bruker jeg den vektoren inne i fread.

my_cols <- c ("date", "county", "state", "cases")

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

Det motsatte av å velge er miste. Du kan velge å importere alle kolonnene unntatt de du spesifiserer med miste, som for eksempel:

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

Som med å velge, miste tar en vektor av kolonnenavn eller numeriske posisjoner.

Bruk fread med grep

Hvis du er kjent med Unix, kan du utfør kommandolinjeverktøy rett fra innsiden. Hvis jeg for eksempel bare ønsket California-data, kunne jeg bruke grep til å bare importere linjer som inneholder teksten "California." Merk at dette søker hver hele rad som en tekststreng, ikke en bestemt kolonne, så dataene dine må være i et format der det er fornuftig.

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

Dessverre forstår grep ikke den originale filens kolonnenavn, så du får standardnavn.

hode (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

Fread lar oss imidlertid spesifisere kolonnenavn med kol. navn alternativ. Jeg kan angi navnene basert på navn fra mydt10 som jeg opprettet ovenfor.

ca leder (ca) dato fylkeskommune fips tilfeller dødsfall 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

Vi kan også bruke vanlige uttrykk, med grep’s -E alternativ, slik at vi kan gjøre mer komplekse søk, for eksempel å se etter fire stater samtidig.

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

col.names = navn (mydt10))

Nok en gang en påminnelse: Dette ser etter hvert av disse statlige navnene hvor som helst i rekken, ikke bare i statskolonnen. Hvis du kjører koden ovenfor og sjekker hvilke stater som er inkludert i resultatene med unik (stater4 $ stat), får du se Oklahoma og Missouri i statskolonnen sammen med Texas, Arizona, Florida og South Carolina. Det er fordi både Oklahoma og Missouri har fylker heter Texas.

Så grep under filimport er en måte å filtrere ut mye data du ikke vil ha fra et veldig stort datasett; men det garanterer ikke at du bare får det du vil. Etter denne typen import, bør du fortsatt filtrere spesifikt på kolonnedata for å sikre at du ikke fikk noe uventet.

Bruk fread's colClasses-alternativet

Du kan angi kolonneklasser under import - for bare noen få kolonner, ikke alle. For eksempel kommer datakolonnen i disse dataene som tegnstrenger, selv om den er i år-måned-dag-format. Vi kan angi kolonnen som heter Dato til datatypen Dato under import ved hjelp av colClasses alternativ.

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

Nå, datoer er datoer.

> str (mydt) Klasser 'data.table' og 'data.frame': 322651 obs. av 6 variabler: $ dato: Dato, format: "2020-01-21" "2020-01-22" "2020-01-23" ... $ fylke: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ state: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ cases: int 1 1 1 1 1 1 1 1 1 1 ... $ dødsfall: int 0 0 0 0 0 0 0 0 0 0 ...

Bruk fread på zip-filer

Du kan importer en fil med glidelås uten å pakke den ut først. fread kan importere gz- og bz2-filer direkte, for eksempelmydt <- fread ("myfile.gz"). Hvis du trenger å importere en zip-fil, kan du pakke den ut med pakke ut systemkommando innen fread, ved hjelp av syntaksenmydt <- fread (cmd = 'unzip -cq myfile.zip').

For flere R-tips, gå til ’Do More With R-siden.