Aggregaatti-tehokas työkalu data Frame in R

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.framen 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.framesarakkeiden 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.frameaggregate 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.

Vastaa

Sähköpostiosoitettasi ei julkaista.