Aggregate-egy hatékony eszköz az adatkeret R

ez a bejegyzés rövid áttekintést nyújt az adatokhoz használt összesített funkcióról.keretek és bemutatja néhány érdekes felhasználása: a triviális, de praktikus, hogy a legbonyolultabb problémákat megoldottam aggregate.

Aggregate egy függvény alap R amely, ahogy a neve is sugallja, összesítheti a bevitt data.frame d.f a FUN paraméter által meghatározott függvény alkalmazásával az aladatok minden oszlopára.a by bemeneti paraméter által meghatározott keretek.

a byparaméternek list – nek kell lennie. Mivel azonban a data.frame oszloplistákat (megnevezett) kezelnek, a data.frame egy vagy több oszlopa by paraméterként is átadható. Érdekes módon, ha ezek az oszlopok ugyanabból a data.frame – ból származnak, mint a x, akkor ezek az oszlopok nem kerülnek továbbításra a FUN függvényhez.

az alkalmazandó függvénynek képesnek kell lennie a vector elfogadására (mivel egy data.frame oszlop részeivel inputként fogják meghívni).

az aladatok.a by bemeneti paraméter által definiált keretek logikai indexelésnek tekinthetők:

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

és tegye ezt minden i1 és length(unique(by)) között. Ne feledje, hogy a by változónak nem kell megegyeznie a data.frame egy (vagy több) oszlopával, de bármi lehet. Ezért a aggregate funkcionalitást reprodukálhatjuk egy for ciklussal, amely a ciklusváltozót futtatja a by – ként átadott változó egyedi értékein, és egy sapply a FUN – ként átadott függvényt alkalmazza a data.frame Al minden oszlopára.data.keret. Egy ilyen megoldás azonban nagyon nehéz lenne dokumentálni, mivel nem világos, hogy mit (és miért) csinál ez a kód.

Aggregate eredményként mindig data.frame értéket ad vissza. Ez a data.frame tartalmazza a by bemeneti paraméter (most egyedi) értékeit első oszlopként, majd oszlopokat, amelyek tartalmazzák a függvény hívásának eredményeit a FUNparaméterben, amelyet a bevitt data.frame oszlopainak részeire alkalmaznak. Érdekes megjegyezni, hogy ha a FUN függvény több értéket ad vissza, akkor a data.frame eredmény oszlopainak osztálya list lesz, vagy valami list lehet leadni (lásd az utolsó példát alább).

fontos megjegyezni, hogy a függvényhívást névtelen vektorokra alkalmazzák a data.frame megnevezett oszlopai helyett, ezért a data.frame nevére való hivatkozás nem fog működni, sem az oszlophivatkozások, például a s.d.f.

alapvető példák

az aggregátum legalapvetőbb felhasználási területei olyan alapfunkciókat foglalnak magukban, mint a meanés sd. Valójában ez a aggregate egyik leggyakoribb felhasználása a mintacsoportok átlagának vagy egyéb tulajdonságainak összehasonlítására.

nemrégiben egy Excel lapból reprodukáltam a számításokat. A legtöbb képlet részösszeg és végösszeg volt. Az Excel lap nem volt nagyon kényelmesen szervezett erre a célra: a sorok, oszlopok és az összegek összegét használták. Az R-ben megváltoztattam az adatokat egy csillagséma ábrázolásra (amikor az összes metaadat soronként van ábrázolva, és minden érték megkapja a saját sorát) a reshape2 csomag és a melt használatával, majd a aggregate-ot használtam különböző változók mentén, hogy megkapjam a különböző összegeket. Minél kevesebb változót használ a by-ban, annál aggregáltabb a végeredmény: a dimenzió mentén a végösszeg egyszerűen ezt a dimenziót használja “by” – ként, míg a részösszegek több változó használatával érhetők el by – ként. A FUN ebben az esetben természetesen sumvolt.

az aggregátum és az alapfüggvény egyik praktikus használata a különböző értékek megjelenéseinek száma:

az aggregátum kedvenc alapfunkcióval történő használata minden hónap utolsó napja egy dátumsorozatban. Ehhez használhatja a következő kódot (feltéve, hogy a dátumokat” ÉÉÉÉ-HH-NN ” formátumban Tárolja karakterláncként vagy Date):

ez nagyon hasznos volt, amikor banki információkkal dolgozott, ahol a hónap utolsó napja a banki ünnepektől, valamint a hétvégéktől függött.

haladó felhasználások

a aggregate fejlettebb használata a saját function írásától függ, például a FUN paraméterként továbbított névtelen függvények. Ehhez használhatja a

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

szintaxist, a lehetséges felhasználások a Portfólió homogén kockázati csoportjainak komplex portfóliókockázati mutatóinak meghívásától kezdve az elosztás mintakategóriákhoz való illesztésén keresztül bármihez, amit igazán meg tud jeleníteni.

íme egy példa egy” komplex ” portfóliókockázati mutatóval (különböző eszközosztályokba tartozó különböző partnerekkel szembeni kitettség):

itt van a aggregate() funkció használata.

következik: Gauss-Eloszlás illesztése a megfigyelésekhez kategóriák szerint:

az alábbiakban a aggregate() függvényt használjuk a kategóriák szerinti átlag és szórás meghatározására.

ez az utolsó példa számos érdekes tulajdonságot mutat be. Először is, a data.frame – tól aggregate – ig és a by változók listájának nem kell azonosnak lennie. Bár ez a bejegyzés más helyein is szerepel, ez egy ilyen beállítás kifejezett példája. Másodszor, a FUN néven átadott függvény nem csak anonim függvény,hanem egynél több bemeneti paraméterrel rendelkező függvényből is curried. A observations egyetlen bemeneti változó függvénye a fitdistr két bemeneti változó függvényből jött létre: az egyik bemeneti változó rögzítése densfun = "normal"beállításával. Harmadszor, ahelyett, hogy a fitdistr függvény teljes visszatérési értékét adná vissza, a visszatérési érték a visszatérési érték estimate elemére korlátozódik. Végül, de nem utolsósorban, a FUN – re átadott anonim függvény visszatérési értéke két változóból áll, és nem csak egyből. Érdekes módon az aggregate a visszatérési értéket list – ről matrix – ra vetíti, és megnevezi az elemeket. Ezek a nevek azonban nem használhatók a mátrix oszlopainak hivatkozására. Akkor azonban hivatkozni őket az alábbiak szerint:

distr.estimate$observation] 3.016988

záró szavak

remélem, hogy hasznosnak találta a fentieket. Most, hogy már jobban ismeri a aggregate – ot, itt az ideje az igazságnak: minden fent és sokkal többet lehet tenni data.table – vel és sokkal gyorsabb teljesítménnyel. A data.table azonban összetett szintaxissal rendelkezik, és valóban meg kell érteni, hogyan működnek a dolgok a motorháztető alatt, míg a aggregate egyszerű és éleslátó. Amíg nem elégedett mind az összesítés logikájával, mind a data.table szintaxisával, érdemes befektetni, hogy először a aggregate használatával írja be a kódot, majd optimalizálja a data.tablehasználatával történő átírással.

azok számára, akik érdeklődnek, egy dedikált bejegyzés érkezik, ahol a fentieket data.table – vel újratervezik, valamint néhány további, a data.table – re jellemző használati esetet.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.