Come usare .SD nel pacchetto R data.table

Per alcuni utenti di data.table, "dot-SD" è un po 'un mistero. Ma il creatore di data.table, Matt Dowle, mi ha detto che in realtà è abbastanza semplice: pensalo come un simbolo che rappresenta "ogni gruppo". Facciamo un paio di esempi.

Dispongo di un set di dati di viaggi giornalieri in bicicletta dal sistema di condivisione di biciclette dell'area di Boston. Se desideri seguire, puoi scaricare il file CSV dal link in fondo a questo articolo.

Carico data.table e importerò il mio file CSV utilizzando la fread()funzione data.table . Nel codice seguente, sto salvando i dati in una tabella di dati chiamata mydt.

libreria (data.table)

mydt <- fread ("daily_cycling_trips_by_usertype.csv")

Successivamente, suggerisco di stampare le prime sei righe con head(mydt)per vedere come appaiono i dati. Vedrai che i dati hanno colonne per la data, il tipo di utente (abbonato o cliente singolo), numero di viaggi, anno e data di inizio del mese per aiutare con i totali per mese.

Il primo esempio suggerito da Matt: Stampa le prime righe della tabella dati raggruppate per tipo di utente . (Stiamo filtrando per le prime 12 righe solo per semplificare la visualizzazione dell'output). 

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

print()ripetuto su ogni gruppo e stampato due volte separate, una per ogni tipo di utente. Il problema, tuttavia, è che non so quale sia il gruppo di utenti del cliente e quale sia il gruppo di utenti dell'abbonato. La colonna "per" non è stata stampata. Fortunatamente, Matt mi ha mostrato un piccolo trucco per questo.

Se si ha familiarità con mydt[i, j, by]la sintassi data.table, ci sono tre parti per la notazione staffa dopo il nome della tabella di dati: i, j, e by. iserve per filtrare le righe, jè per ciò che vuoi fare ed byè come vuoi raggruppare i tuoi dati.

Per esempio: 

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

Nella riga di codice sopra, ho appena messo le parentesi graffe intorno alla jparte. Questo mi permetterà di aggiungere più espressioni R all'interno jdell'argomento.  Ora è sempre lo stesso di prima: nessun nome di tipo utente.

Ma in questa riga di codice, sguardo alla dichiarazione R ho aggiunto (beh, Matt mi ha detto di aggiungere): print(.BY).

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

.BYè un simbolo data.table speciale che contiene il valore di by: quale colonna o colonne sto raggruppando.

Se esegui questo codice, avrai il nome di ciascuna variabile di raggruppamento insieme alla stampa.

Sharon Machlis,

Quindi questo è un esempio molto semplice. Immagino che potresti voler fare qualcosa di un po 'più interessante con la .SDstampa, però. Successivamente, esaminiamo il riepilogo dei dati per gruppo, calcolando quale giorno ha registrato il maggior numero di viaggi ogni mese quest'anno.

Questa riga di codice ha tutto:

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

Il iprimo argomento tra parentesi filtra per tutte le righe in cui l'anno è 2019. L' jargomento è la parte interessante per .SD. Pensa .SDcome se si riferisse a ciascun gruppo di dati. O come ha detto Matt: “Tu fai jda te by. Come un forciclo. "

E se desideri visualizzare i massimi per ogni mese e tipo di utente? Basta aggiungere un'altra colonna al by(terzo) argomento:

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

di =. (MonthStarting, usertype)]

Esistono diversi modi per esprimere il raggruppamento per più di una colonna in data.table. Un modo è con il punto prima dei nomi di colonna non quotati, come sopra. Un altro è usare al listposto del punto, ad esempio: 

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

by = list (MonthStarting, usertype)]

È inoltre possibile utilizzare un vettore R di base convenzionale racchiuso tra virgolette attorno al nome di ogni colonna. 

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

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

Per altri suggerimenti R, vai alla pagina del video "Fai di più con R" o controlla la playlist di YouTube "Fai di più con R".

scarica il file CSV dei dati di viaggio in bicicletta di esempio per accompagnare il mio articolo "Come usare .SD nel pacchetto R data.table" e il video Sharon Machlis

Spero di vederti nel prossimo episodio!