Agregát-výkonný nástroj pro datový rámec v R

tento příspěvek poskytuje krátký přehled agregované funkce používané pro data.rámy a představuje několik zajímavých použití: od triviálních, ale praktických až po nejsložitější problémy, které jsem vyřešil agregátem.

Aggregate je funkce v základní Výzkum, který může, jak už název napovídá, agregátní přivedeného data.frame d.f použitím funkce stanovené FUN parametr, aby každý sloupec dílčích údajů.rámce definované vstupním parametrem by.

parametr by musí být list. Nicméně, protože data.frame ‚ s jsou zpracovány jako (pojmenované) seznamy sloupců, jeden nebo více sloupců data.frame může být také předán jako parametr by. Je zajímavé, že pokud jsou tyto sloupce stejné data.frame jako sloupce zadané jako x, tyto sloupce nejsou předány funkci FUN.

funkce, která má být použita, musí být schopna přijmout vector (protože bude volána s částmi sloupce data.frame jako vstup).

dílčí data.rámce definované vstupním parametrem by lze považovat za logické indexování:

d.f <- data.frame(rating = c("AAA", "A", "A", "AAA", "BB", "BB", "AAA", "A"))i <- 1by <- d.f$ratingsub.data.frame <- d.f, ]

a to pro každý i mezi 1 a length(unique(by)). Všimněte si, že proměnná by nemusí souhlasit s jedním (nebo více) sloupcem data.frame, ale může to být cokoli. Proto, jeden může reprodukovat aggregate funkce for cyklus běží cyklus proměnné přes jedinečné hodnoty proměnné předána jako by a použití funkce předány jako FUN každý sloupec data.frame sub.datum.snímek. Takové řešení by však bylo velmi obtížné zdokumentovat, protože by nebylo jasné, co (a proč) tento kód skutečně dělá.

Aggregate vždy vrátí data.frame jako výsledek. data.frame bude obsahovat (nyní unikátní) hodnoty ze vstupního parametru by jako první sloupec a potom sloupce obsahující výsledky volání funkce v FUN parametr aplikován na části sloupce zadaná data.frame. Je zajímavé si povšimnout, že pokud funkci FUN vrací více hodnot, třída sloupce výsledek data.frame bude list nebo něco list může být obsazení (viz poslední příklad níže).

je důležité si uvědomit, že volání funkce se aplikuje na bezejmenné vektorů, spíše než jménem sloupce data.frame a proto s odkazem na jména data.frame nebude fungovat, ani odkazy na sloupce jako s.d.f.

základní příklady

nejzákladnější použití agregátu zahrnuje základní funkce jako mean a sd. Je to skutečně jedno z nejběžnějších použití aggregate k porovnání průměrných nebo jiných vlastností skupin vzorků.

Nedávno jsem reprodukoval výpočty z listu aplikace Excel. Většina vzorců byly mezisoučty a velké součty. List aplikace Excel nebyl pro tento účel příliš pohodlně uspořádán: byly použity částky přes řádky, sloupce a součty těchto částek. V R, změnil jsem data do star schema zastoupení (když všechna metadata jsou zastoupeny řádek-moudrý a každá hodnota má svůj vlastní řádek) pomocí reshape2 balíček melt pak aggregate podél různých proměnných získat různé součty. Méně proměnných, použití v by více agregované do konce-výsledek: celkový součet po rozměr je jednoduše pomocí této dimenze jako „o“, zatímco mezisoučty může být dosaženo pomocí více proměnných by. FUN v tomto případě byl samozřejmě sum.

Jednom praktickém použití kameniva a základní funkce je stále řada vystoupení různých hodnot:

Můj oblíbený použití agregát s základní funkce je stále poslední den každého měsíce v sérii data. K tomu je možné použít následující kód (za předpokladu, že vaše data jsou uložena v „RRRR-MM-DD“ formát jako řetězce nebo jako Date):

To přišlo velmi vhod při práci s bankovní informace, kde poslední den měsíce závisel na bankovní svátky i víkendy.

Pokročilé Použití

Více pokročilé použití aggregate záviset na psaní své vlastní function, např. anonymní funkce předány jako FUN parametr. Dělat tak, jeden může použít syntaxi

# do not run the syntaxaggregate(x = d.f, by = by.list, FUN = function(s.d.f){y <- s.d.f; return(y)}

možné použití v rozmezí od volání komplexní portfolio rizik, metriky pro homogenní rizikové skupiny z portfolia, přes montáž, rozdělení do kategorií vzorků, aby něco, co můžete obraz, opravdu.

zde je příklad s“ komplexní “ metrikou rizika portfolia (expozice různým protistranám v různých třídách aktiv):

zde je použití funkce aggregate().

další: přizpůsobení Gaussova rozdělení pozorování podle kategorií:

níže používáme funkci aggregate() k nalezení střední a směrodatné odchylky podle kategorií.

tento poslední příklad ukazuje několik zajímavých vlastností. Za prvé, data.frameaggregate a seznam proměnných by nemusí být stejné. I když je to naznačeno na jiných místech příspěvku, toto je explicitní příklad takového nastavení. Za druhé, funkce předaná jako FUN není pouze anonymní funkcí, je curried z funkce s více než jedním vstupním parametrem. Funkce jedné vstupní proměnné observations byl vytvořen ze dvou-vstupní proměnná funkce fitdistr: stanovení jedné ze vstupních proměnných nastavením densfun = "normal". Zatřetí, namísto vrácení plné návratové hodnoty funkce fitdistr je návratová hodnota omezena na prvek estimate z návratové hodnoty. A v neposlední řadě návratová hodnota anonymní funkce předaná FUN se skládá ze dvou proměnných a ne pouze jedné. Zajímavé je, že agregát vrhá návratovou hodnotu z list na matrix a pojmenuje prvky pro nás. Tyto názvy však nelze použít k odkazu na sloupce matice. Můžete je však odkazovat následovně:

distr.estimate$observation] 3.016988

závěrečná slova

doufám, že jste našli výše uvedené užitečné. Nyní, když jste více obeznámeni s aggregate, je čas na pravdu: vše výše a mnohem více lze provést s data.table as mnohem rychlejším výkonem. Nicméně, data.table má složitou syntaxi a člověk opravdu musí pochopit, jak věci fungují pod kapotou, zatímco aggregate je jednoduchý a bystrý. Dokud nebudete spokojeni s logikou agregace i syntaxí data.table, je hodnou investicí nejprve napsat kód pomocí aggregate a poté jej optimalizovat přepsáním pomocí data.table.

pro ty z vás, kteří mají zájem, přichází vyhrazený příspěvek, kde je výše uvedené přepracováno data.table, spolu s některými dalšími případy použití specifickými pro data.table.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.