Programmering

Sådan bruges .SD i R data.table-pakken

For nogle data.table-brugere er "dot-SD" lidt af et mysterium. Men skaberen af ​​data.table Matt Dowle fortalte mig, at det faktisk er ret simpelt: Tænk bare på det som et symbol, der repræsenterer "hver gruppe." Lad os gennemgå et par eksempler.

Jeg har et datasæt med daglige cykelture fra Boston-områdets cykeldelingssystem. Hvis du gerne vil følge med, kan du downloade CSV-filen fra linket i bunden af ​​denne artikel.

Jeg indlæser data.table og importerer min CSV-fil ved hjælp af data.table's fread () fungere. I nedenstående kode gemmer jeg dataene i en datatabel kaldet mydt.

bibliotek (data.table)

mydt <- fread ("daily_cycling_trips_by_usertype.csv")

Dernæst foreslår jeg at udskrive de første seks linjer med hoved (mydt) for at se, hvordan dataene ser ud. Du vil se, at dataene har kolonner for datoen, brugertypen (abonnent eller en-tur-kunde), antallet af ture, år og måneds startdato for at hjælpe med totaler efter måned.

Det første eksempel, Matt foreslog: Udskriv de første par rækker i datatabellen grupperet efter brugertype. (Vi filtrerer efter de første 12 rækker bare for at gøre det lettere at se output).

mydt [1:12, print (.SD), af = usertype]

Print() itereret over hver gruppe og udskrevet to separate gange, en for hver brugertype. Problemet er dog, at jeg ikke ved, hvilken kundebrugergruppe, der er abonnentbrugergruppe. Kolonnen "ved" blev ikke udskrevet. Heldigvis viste Matt mig et lille trick til det.

Hvis du er fortrolig med mydt [i, j, by] data.table syntaks, der er tre dele til parentesnotationen efter datatabellens navn: jeg, jog ved. jeg er til filtrering af rækker, j er til det, du vil gøre, og ved er, hvordan du vil gruppere dine data.

For eksempel:

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

I kodelinjen ovenfor har jeg lige sat krøllede seler rundt om j en del. Det vil lade mig tilføj flere R-udtryk inde i j argument. Nu er det stadig det samme som før: ingen brugertypenavne.

Men i denne næste kodelinje, se på R-sætningen, jeg tilføjede (godt, Matt fortalte mig at tilføje): udskrive (.BY).

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

.VED er et specielt datatabelsymbol, der indeholder værdien af ved - hvilken kolonne eller kolonner jeg grupperer efter.

Hvis du kører denne kode, har du navnet på hver grupperingsvariabel sammen med udskriften.

Sharon Machlis,

Så det er et meget grundlæggende eksempel. Jeg gætter på, at du måske vil gøre noget lidt mere interessant med .SD end print, dog. Lad os derefter se på at opsummere dataene efter gruppe og beregne, hvilken dag der havde flest ture hver måned i år.

Denne kodelinje har det hele:

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

Det jeg første argument i parentesfiltre for alle rækker, hvor året er 2019. Den j argument er den interessante del for .SD. Tænke på .SD som henviser til hver gruppe af dine data. Eller som Matt sagde: ”Det gør du j ved ved. Som en til løkke. ”

Hvad hvis du vil se maksimum for hver måned og brugertype? Bare tilføj en ny kolonne til ved (tredje) argument:

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

af =. (MonthStarting, usertype)]

Der er flere måder at udtrykke gruppering på mere end en kolonne i data.table. En måde er med prikken foran de ikke-citerede kolonnenavne, som ovenfor. En anden er at bruge liste i stedet for prikken, for eksempel:

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

af = liste (MonthStarting, usertype)]

Du kan også bruge en konventionel R-base-vektor med anførselstegn omkring hvert søjlenavn.

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

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

For flere R-tip, gå til videosiden "Gør mere med R" på eller tjek YouTube-playlisten "Gør mere med R".

download prøve Cykelturdata CSV-fil til at ledsage min artikel "Sådan bruges .SD i R data.table-pakken" og video Sharon Machlis

Håber vi ses næste episode!