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 by
paramé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 i
1 é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 FUN
paramé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 sum
volt.
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.table
haszná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.