Programování

Jak používat .SD v balíčku R data.table

Pro některé uživatele datové tabulky je „dot-SD“ trochu záhadou. Ale tvůrce datové tabulky Matt Dowle mi řekl, že je to vlastně celkem jednoduché: Představte si to jako symbol představující „každou skupinu“. Pojďme si projít několik příkladů.

Mám datovou sadu denních cyklistických výletů ze systému sdílení kol v bostonské oblasti. Chcete-li pokračovat, můžete si stáhnout soubor CSV z odkazu v dolní části tohoto článku.

Nahraju data.table a importuji svůj soubor CSV pomocí data.table fread () funkce. V níže uvedeném kódu ukládám data do datové tabulky s názvem mydt.

knihovna (data.table)

mydt <- fread ("daily_cycling_trips_by_usertype.csv")

Dále navrhuji tisknout prvních šest řádků pomocí hlava (mydt) abyste viděli, jak data vypadají. Uvidíte, že data obsahují sloupce pro datum, typ uživatele (předplatitel nebo zákazník s jednou cestou), počet cest, rok a počáteční datum měsíce, které vám pomohou se součty podle měsíců.

První příklad, který Matt navrhl: Vytiskněte prvních několik řádků datové tabulky seskupené podle typu uživatele. (Filtrujeme prvních 12 řádků, abychom lépe viděli výstup).

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

tisk() iterováno nad každou skupinou a vytištěno dvakrát odděleně, jeden pro každý typ uživatele. Problém však je, že nevím, která je skupina uživatelů zákazníků a která skupina uživatelů předplatitelů. Sloupec „by“ se nevytiskl. Naštěstí mi na to Matt ukázal malý trik.

Pokud jste obeznámeni s mydt [i, j, podle] syntaxe data.table existují tři části notace závorky za názvem datové tabulky: i, j, a podle. i je pro filtrování řádků, j je pro to, co chcete dělat, a podle tak chcete seskupit svá data.

Například:

mydt [1:12, {tisk (.SD)}, autor = typ uživatele)

V řádku kódu výše jsem vložil složené závorky kolem j část. To mi to dovolí přidat více R výrazů uvnitř j argument. Nyní je to stále stejné jako dříve: žádná jména typů uživatelů.

Ale v tomto dalším řádku kódu se podívejte na prohlášení R, které jsem přidal (no, Matt mi řekl, abych přidal): tisk (.BY).

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

.PODLE je speciální symbol data.table, který uchovává hodnotu podle - podle kterého sloupce nebo sloupců seskupuji.

Pokud spustíte tento kód, budete mít spolu s výtiskem název každé seskupovací proměnné.

Sharon Machlis,

To je velmi základní příklad. Hádám, že byste možná chtěli udělat něco trochu zajímavějšího .SD než tisk. Dále se podívejme na shrnutí údajů podle skupin a na výpočet toho, který den měl tento rok nejvíce cest každý měsíc.

Tento řádek kódu obsahuje vše:

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

The i první argument v závorkách filtruje všechny řádky, kde je rok 2019. The j argument je zajímavá část pro .SD. Myslet na .SD jako odkaz na každou skupinu vašich dat. Nebo jak řekl Matt: „Ano j podle podle. Jako pro smyčka."

Co když chcete vidět maxima pro každý měsíc a typ uživatele? Stačí přidat další sloupec do podle (třetí) argument:

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

autor =. (MonthStarting, usertype)]

Existuje několik způsobů, jak vyjádřit seskupení podle více než jednoho sloupce v tabulce data.table. Jedním ze způsobů je tečka před názvy sloupců bez uvozovek, jak je uvedeno výše. Další je použít seznam místo tečky, například:

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

by = list (MonthStarting, usertype)]

Můžete také použít konvenční základní vektor R s uvozovkami kolem názvu každého sloupce.

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

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

Další tipy R najdete na stránce videa „Do More With R“ na YouTube nebo v seznamu skladeb YouTube „Do More With R“.

stáhnout ukázkový soubor CSV s údaji o jízdním kole, který doprovází můj článek „Jak používat .SD v balíčku R data.table“ a video Sharon Machlis

Doufám, že se uvidíme v další epizodě!