tämä viesti antaa lyhyen katsauksen yhteenlaskettu toiminto käytetään tietojen.kehyksiä ja esittelee mielenkiintoisia käyttötarkoituksia: triviaaleista mutta kätevistä monimutkaisimpiin ongelmiin, jotka olen ratkaissut aggregaatilla.
Aggregate
on perusrekisterissä oleva funktio, joka voi, kuten nimestä voi päätellä, koostaa syötetyn data.frame
d.f soveltamalla FUN
parametrin määrittelemää funktiota kuhunkin alatietosarakkeeseen.by
input-parametrin määrittelemät kehykset.
by
parametrin on oltava list
. Koska data.frame
n sarakkeita käsitellään kuitenkin (nimettyinä) sarakeluetteloina, voidaan data.frame
: n yksi tai useampi sarake ohittaa myös by
– parametrin. Mielenkiintoista on, että jos nämä sarakkeet ovat samaa data.frame
kuin x
syötetty, näitä sarakkeita ei siirretä funktiolle FUN
.
sovellettavan funktion on kyettävä hyväksymään a vector
(koska sitä kutsutaan A data.frame
sarakkeen osilla syötteeksi).
alatieto.by
input-parametrin määrittelemiä kehyksiä voidaan ajatella loogisena indeksointina:
d.f <- data.frame(rating = c("AAA", "A", "A", "AAA", "BB", "BB", "AAA", "A"))i <- 1by <- d.f$ratingsub.data.frame <- d.f, ]
ja tee näin jokaiselle i
välillä 1 ja length(unique(by))
. Huomaa, että by
muuttujan ei tarvitse yhtyä data.frame
yhden (tai useamman) sarakkeen kanssa, vaan se voi olla mitä tahansa. Näin ollen aggregate
funktionaalisuus voidaan toistaa käyttämällä for
sykliä, jossa syklimuuttuja suoritetaan by
merkityn muuttujan yksilöllisillä arvoilla, ja sapply
soveltamalla FUN
merkittyä funktiota data.frame
alaotsikon jokaiseen sarakkeeseen.tieto.kehys. Tällaista kiertoa olisi kuitenkin hyvin vaikea dokumentoida, koska olisi epäselvää, mitä (ja miksi) tämä koodi todella tekee.
Aggregate
palauttaa aina data.frame
tämän seurauksena. Tämä data.frame
sisältää (nyt yksilölliset) arvot input-parametrista by
ensimmäisenä sarakkeena ja sen jälkeen sarakkeet, jotka sisältävät funktiolle annetun kutsun tulokset parametrissa FUN
, jota sovelletaan inputted data.frame
sarakkeiden osiin. On mielenkiintoista huomata, että jos funktio FUN
palauttaa useita arvoja, tuloksen data.frame
sarakkeiden luokka on list
tai jotain list
voidaan heittää (katso viimeinen esimerkki alla).
on tärkeää huomata, että funktiokutsua sovelletaan nimettömiin vektoreihin data.frame
: n nimettyjen sarakkeiden sijaan, joten data.frame
: n nimiin viittaaminen ei toimi, eivätkä myöskään sarakeviittaukset, kuten s.d.f
.
perusesimerkkejä
aggregaatin peruskäyttötapoja ovat kantafunktiot, kuten mean
ja sd
. Se onkin yksi yleisimmistä aggregate
käyttökohteista otosryhmien keskiarvojen tai muiden ominaisuuksien vertailuun.
äskettäin toistin laskelmat Excel-taulukosta. Useimmat kaavat olivat välisummia ja suursummia. Excel-arkki ei ollut kovin mukavasti järjestetty tätä tarkoitusta varten: summat yli rivien, sarakkeiden ja niiden summien summat käytettiin. R: ssä olen muuttanut datan tähtikaavioesitykseksi (kun kaikki metatiedot esitetään rivittäin ja jokainen arvo saa oman rivinsä) käyttäen reshape2
pakettia ja melt
sitten käytetään aggregate
eri muuttujia pitkin, jotta saadaan eri loppusummat. Mitä vähemmän muuttujia by
käytät, sitä aggregoidumpi lopputulos on: kokonaissumma dimension varrella tarkoittaa yksinkertaisesti sitä, että dimensio on ”by”, kun taas välisummat voidaan saavuttaa käyttämällä useita muuttujia, kuten by
. FUN
tässä tapauksessa oli tietysti sum
.
yksi kätevä aggregaatin ja base-funktion käyttö on saada eri arvojen esiintymismäärä:
suosikkikäyttöni aggregaatilla, jossa on base-funktio, on saada joka kuukauden viimeinen päivä joukko päivämääriä. Tätä varten voidaan käyttää seuraavaa koodia (olettaen, että päivämäärät tallennetaan ”VVVV-KK-PP” – muodossa merkkijonoina tai muodossa Date
):
tämä tuli erittäin kätevä työskenneltäessä pankkitietojen kanssa, jossa kuukauden viimeinen päivä riippui pankkilomista sekä viikonlopuista.
kehittyneet käyttötarkoitukset
aggregate
kehittyneemmät käyttötarkoitukset riippuvat omien function
kirjoittamisesta, esim. FUN
parametrina siirretyt anonyymit funktiot. Tätä varten voidaan käyttää syntaksia
# do not run the syntaxaggregate(x = d.f, by = by.list, FUN = function(s.d.f){y <- s.d.f; return(y)}
mahdolliset käyttötarkoitukset vaihtelevat monimutkaisista salkun riskimittareista salkun homogeenisiin riskiryhmiin sovittamalla jako näyteluokkiin mihin tahansa, mitä voit kuvitella.
tässä on esimerkki ”monimutkaisesta” salkkuriskimittarista (vastuut, jotka koskevat eri omaisuuseräluokkiin kuuluvia vastapuolia):
tässä käytetään aggregate()
funktiota.
seuraavaksi: Gaussin jakauman sovittaminen havaintoihin kategorioittain:
alla käytetään aggregate()
funktiota keskiarvon ja keskihajonnan löytämiseksi kategorioittain.
tämä viimeinen esimerkki esittelee useita mielenkiintoisia ominaisuuksia. Ensinnäkin data.frame
– aggregate
ja by
muuttujien luettelon ei tarvitse olla sama. Vaikka tämä on implisiittinen muissa paikoissa postitse, tämä on selkeä esimerkki tällaisesta setup. Toiseksi, FUN
ohitettu funktio ei ole vain nimetön funktio, vaan se kursivoidaan funktiosta, jolla on useampi kuin yksi tuloparametri. Kahden tulomuuttujan funktiosta fitdistr
on luotu yhden tulomuuttujan funktio observations
: vahvistetaan yksi tulomuuttuja asettamalla densfun = "normal"
. Kolmanneksi sen sijaan, että funktion fitdistr
täysi palautusarvo palautettaisiin, palautusarvo rajoittuu alkioon estimate
palautusarvosta. Ja viimeisenä mutta ei vähäisimpänä, FUN
siirretyn anonyymin funktion palautusarvo koostuu kahdesta muuttujasta eikä vain yhdestä. Mielenkiintoista on, että aggregaatti heittää palautusarvon list
a: han matrix
ja nimeää alkuaineet meille. Näillä nimillä ei kuitenkaan voida viitata matriisin sarakkeisiin. Voit kuitenkin viitata niihin seuraavasti:
distr.estimate$observation] 3.016988
Loppusanat
toivon, että olet havainnut edellä mainitun hyödylliseksi. Nyt kun aggregate
on tutumpi, on totuuden aika: kaikki edellä ja paljon muutakin voi tehdä data.table
: llä, ja paljon nopeammalla suorituksella. data.table
on kuitenkin monimutkainen syntaksi ja on todella ymmärrettävä, miten asiat toimivat konepellin alla, kun taas aggregate
on yksinkertainen ja oivaltava. Kunnes olet sinut sekä yhdistelyn logiikan että data.table
syntaksin kanssa, on arvokas sijoitus kirjoittaa koodi ensin käyttäen aggregate
ja optimoida se sitten kirjoittamalla se uudelleen käyttämällä data.table
.
kiinnostuneille on tulossa oma virka, jossa yllä oleva on uusittu data.table
: llä, sekä joitakin data.table
: lle ominaisia lisäkäyttötapauksia.