Verwendung von .SD im Paket R data.table

Für einige Benutzer von data.table ist „dot-SD“ ein Rätsel. Aber der Ersteller von data.table, Matt Dowle, sagte mir, dass es eigentlich ganz einfach ist: Stellen Sie es sich einfach als Symbol für „jede Gruppe“ vor. Lassen Sie uns ein paar Beispiele durchgehen.

Ich habe einen Datensatz mit täglichen Radtouren aus dem Fahrradverleihsystem der Region Boston. Wenn Sie mitmachen möchten, können Sie die CSV-Datei über den Link am Ende dieses Artikels herunterladen.

Ich lade data.table und importiere meine CSV-Datei mit der fread()Funktion data.table . Im folgenden Code speichere ich die Daten in einer Datentabelle namens mydt.

Bibliothek (data.table)

mydt <- fread ("daily_cycling_trips_by_usertype.csv")

Als nächstes schlage ich vor, die ersten sechs Zeilen mit head(mydt)zu drucken, um zu sehen, wie die Daten aussehen. Sie werden sehen, dass die Daten Spalten für das Datum, den Benutzertyp (Abonnent oder Kunde mit einer Reise), die Anzahl der Reisen, das Jahr und das Startdatum des Monats enthalten, um die Gesamtsummen nach Monat zu ermitteln.

Das erste Beispiel, das Matt vorgeschlagen hat: Drucken Sie die ersten Zeilen der Datentabelle, gruppiert nach Benutzertyp . (Wir filtern nach den ersten 12 Zeilen, um die Anzeige zu vereinfachen.) 

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

print()über jede Gruppe iteriert und zwei separate Male gedruckt, eine für jeden Benutzertyp. Das Problem ist jedoch, dass ich nicht weiß, welche die Kundenbenutzergruppe und welche die Abonnentenbenutzergruppe ist. Die Spalte "by" wurde nicht ausgedruckt. Zum Glück hat mir Matt einen kleinen Trick dafür gezeigt.

Wenn Sie mit vertraut sind mydt[i, j, by]data.table Syntax gibt es drei Teile an der Halterung Schreibweise nach dem Datentabellenname: i, j, und by. idient zum Filtern von Zeilen, jdient dem, was Sie tun möchten, und bydient zum Gruppieren Ihrer Daten.

Zum Beispiel: 

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

In der obigen Codezeile habe ich nur geschweifte Klammern um das jTeil gesetzt. Dadurch kann ich dem jArgument mehrere R-Ausdrücke hinzufügen .  Jetzt ist es immer noch dasselbe wie zuvor: Keine Benutzertypnamen.

Aber schauen Sie sich in dieser nächsten Codezeile die R-Anweisung an, die ich hinzugefügt habe (nun, Matt hat mir gesagt, ich soll hinzufügen) : print(.BY).

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

.BYist ein spezielles data.table-Symbol, das den Wert von by- nach welcher Spalte oder welchen Spalten ich gruppiere.

Wenn Sie diesen Code ausführen, haben Sie den Namen jeder Gruppierungsvariablen zusammen mit dem Ausdruck.

Sharon Machlis,

Das ist also ein sehr einfaches Beispiel. Ich vermute, Sie möchten vielleicht etwas Interessanteres .SDals Drucken machen. Als nächstes wollen wir die Daten nach Gruppen zusammenfassen und berechnen, welcher Tag in diesem Jahr jeden Monat die meisten Reisen hatte.

Diese Codezeile bietet alles:

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

Das ierste Argument in den Klammern filtert nach Zeilen, in denen das Jahr 2019 ist. Das jArgument ist der interessante Teil für .SD. Stellen Sie sich vor .SD, Sie beziehen sich auf jede Gruppe Ihrer Daten. Oder wie Matt sagte : „Sie tun jdurch by. Wie eine forSchleife. "

Was ist, wenn Sie Höchstwerte für jeden Monat und Benutzertyp anzeigen möchten? Fügen Sie dem by(dritten) Argument einfach eine weitere Spalte hinzu :

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

by =. (MonthStarting, usertype)]

Es gibt verschiedene Möglichkeiten, die Gruppierung nach mehr als einer Spalte in data.table auszudrücken. Eine Möglichkeit ist, wie oben, mit dem Punkt vor den nicht zitierten Spaltennamen. Eine andere Möglichkeit besteht darin, listanstelle des Punkts Folgendes zu verwenden: 

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

by = list (MonthStarting, usertype)]

Sie können auch einen herkömmlichen Basis-R-Vektor mit Anführungszeichen um jeden Spaltennamen verwenden. 

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

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

Weitere R-Tipps finden Sie auf der Videoseite „Do More With R“ auf der YouTube-Wiedergabeliste „Do More With R“.

Laden Sie die CSV-Beispieldatei für Fahrradreisedaten herunter, um meinen Artikel und das Video Sharon Machlis zu begleiten

Ich hoffe wir sehen uns in der nächsten Folge!