Programmering

Hvordan bruke .SD i R data.table-pakken

For noen data.table-brukere er "dot-SD" litt av et mysterium. Men skaper av data.table Matt Dowle fortalte meg at det faktisk er ganske enkelt: Bare tenk på det som et symbol som representerer "hver gruppe." La oss gå gjennom et par eksempler.

Jeg har et datasett med daglige sykkelturer fra Boston-områdets sykkeldelingssystem. Hvis du vil følge med, kan du laste ned CSV-filen fra lenken nederst i denne artikkelen.

Jeg laster data.table og importerer CSV-filen min ved hjelp av data.table's fread () funksjon. I koden nedenfor lagrer jeg dataene i en datatabell som heter mydt.

bibliotek (data.table)

mydt <- fread ("daily_cycling_trips_by_usertype.csv")

Deretter foreslår jeg at du skriver ut de første seks linjene med hodet (mydt) for å se hvordan dataene ser ut. Du vil se at dataene har kolonner for datoen, brukertypen (abonnent eller en-tur-kunde), antall turer, år og måneds startdato for å hjelpe til med totaler etter måned.

Det første eksemplet Matt foreslo: Skriv ut de første radene i datatabellen gruppert etter brukertype. (Vi filtrerer for de første 12 radene bare for å gjøre det lettere å se utdataene).

mydt [1:12, utskrift (.SD), av = usertype]

skrive ut() gjentok over hver gruppe og skrev ut to separate ganger, en for hver brukertype. Problemet er imidlertid at jeg ikke vet hvilken som er brukerbrukergruppen og hvem som er abonnentbrukergruppen. Kolonnen “etter” ble ikke skrevet ut. Heldigvis viste Matt meg et lite triks for det.

Hvis du er kjent med mydt [i, j, av] data.table syntaks, det er tre deler til brakettnotasjonen etter datatabellnavnet: Jeg, j, og av. Jeg er for filtrering av rader, j er for det du vil gjøre, og av er hvordan du vil gruppere dataene dine.

For eksempel:

mydt [1:12, {print (.SD)}, av = usertype]

I kodelinjen ovenfor har jeg bare satt krøllete bukseseler rundt j del. Det kommer til å la meg legg til flere R-uttrykk inne i j argument. Nå er det fortsatt det samme som før: ingen brukertypenavn.

Men i denne neste kodelinjen, se på R-setningen jeg la til (vel, Matt fortalte meg å legge til): skrive ut (.BY).

mydt [1:12, {print (.BY); print (.SD)}, av = usertype]

.AV er et spesielt datatabelsymbol som holder verdien av av - hvilken kolonne eller kolonner jeg grupperer etter.

Hvis du kjører denne koden, får du navnet på hver grupperingsvariabel sammen med utskriften.

Sharon Machlis,

Så det er et veldig grunnleggende eksempel. Jeg tipper at du kanskje vil gjøre noe litt mer interessant med .SD enn utskrift, skjønt. La oss deretter se på å oppsummere dataene etter gruppe, og beregne hvilken dag som hadde flest turer hver måned i år.

Denne kodelinjen har alt:

mydt [Year == "2019", .SD [which.max (Trips)], by = MonthStarting]

De Jeg første argument i parentesfiltrene for alle rader der året er 2019. The j argument er den interessante delen for .SD. Tenker på .SD som refererer til hver gruppe av dataene dine. Eller som Matt sa: “Du gjør det j av av. Som en til Løkke."

Hva om du vil se maksimum for hver måned og brukertype? Bare legg til en annen kolonne i av (tredje) argument:

mydt [Year == "2019", .SD [which.max (Trips)],

av =. (MonthStarting, brukertype)]

Det er flere måter å uttrykke gruppering på mer enn én kolonne i data.table. En måte er med prikken før de ikke siterte kolonnenavnene, som ovenfor. En annen er å bruke liste i stedet for prikken, for eksempel:

mydt [Year == "2019", .SD [which.max (Trips)],

av = liste (MonthStarting, brukertype)]

Du kan også bruke en konvensjonell base R-vektor med anførselstegn rundt hvert kolonnenavn.

mydt [Year == "2019", .SD [which.max (Trips)],

av = c ("MonthStarting", "usertype")]

For flere R-tips, gå til videosiden "Gjør mer med R" på eller sjekk ut YouTube-spillelisten "Gjør mer med R".

last ned CSV-fil for sykkelturdata for å følge artikkelen og videoen min "Hvordan bruke. SD i R data.table-pakken" Sharon Machlis

Håper vi sees neste episode!

$config[zx-auto] not found$config[zx-overlay] not found