Programavimas

Padarykite daugiau naudodami „R“: greito peržvalgos lenteles naudodami įvardintus vektorius

Koks valstybinis Arkanzaso sutrumpinimas? Ar tai AR? AK? AS?

Gal turite duomenų rėmelį su informacija. Arba bet koks informacija, kur yra vienas stulpelis su kategorijomis, o kitas stulpelis su vertėmis. Yra tikimybė, kad tam tikru momentu norėtumėte ieškoti vertė pagal kategoriją, kartais vadinama Raktas. Daug programavimo kalbų turi būdų, kaip dirbti su raktų ir verčių poromis. Tai lengva padaryti ir R, su nurodytais vektoriais. Štai kaip.

Turiu duomenų su valstybiniais pavadinimais ir santrumpomis, kuriuos išsaugojau pavadintame duomenų rėmelyje postal_df. (Kodas, skirtas sukurti tą duomenų rėmelį, yra šio įrašo apačioje, jei norite sekti paskui).

Aš bėgsiu uodega (postal_df) norėdami pamatyti, kaip tai atrodo.

 Valstijos pašto kodas 45 Vermontas VT 46 Virdžinija VA 47 Vašingtonas WA 48 Vakarų Virdžinija WV 49 Viskonsinas WI 50 Vajomingas WY

Paieškos lentelės / pavadinto vektoriaus reikšmės yra vektoriaus, o raktų - pavadinimai. Taigi leiskite man pirmiausia padaryti vertybių, esančių stulpelyje „PostalCode“, vektorių:

getpostalcode <- postal_df $ PostalCode

Toliau pridedu pavadinimus iš valstybės stulpelio.

vardai (getpostalcode) <- postal_df $ valstija

Į naudoti šis įvardytas vektorius kaip paieškos lentelė, formatas yra „mylookupvector“ ['raktas'].

Taigi, kaip gauti Arkanzaso pašto kodą:

gauti pašto kodą ['Arkanzasas']

Jei norite tik vertės, be rakto, pridėkite nepavadinti funkciją iki tos vertės, kurią grąžinate:

nenusiųsti („getpostalcode“ („Arkanzasas“))

Atnaujinimas: naudodami formatą taip pat galite gauti tik vieną vertę gauti pašto kodą [['Arkanzasas']] - tai yra dvigubi skliaustai, užuot pridėję pavadinti (). Ačiū Peteriui Harisonui už patarimą per „Twitter“. Tačiau Hadley Wickhamas pažymi, kad dvigubo skliaustelio formatas tinka tik vienai reikšmei. Jei darote kažką panašaus kaip sukurti naują stulpelį duomenų rėmelyje, laikykitės nen vardo ().

Tai viskas. Aš žinau, kad tai yra šiek tiek nereikšmingas pavyzdys, tačiau jis yra realiai naudojamas. Pavyzdžiui, aš gavau įvardytą FIPS kodų vektorių, kurio man reikia dirbant su JAV surašymo duomenimis.

Pradėjau nuo vadinamų valstijų ir FIPS kodų duomenų rėmelio fipsdf (kodas yra žemiau). Tada aš sukūriau vektorių, vadinamą getfips iš duomenų rėmelio „fips“ kodo stulpelio ir valstybes pridėjo kaip pavadinimus.

fipsdf <- rio :: import ("data / FIPS.csv")

getfips <- fipsdf $ FIPS

vardai (getfips) <- fipsdf $ State

Dabar, jei noriu Masačusetso FIPS kodo, galiu naudoti getfips ['Masačusetsas'] . Norėčiau pridėti pavadinimą (), kad gautų tik vertę be pavadinimo: nenusiųsti (getfips ['Massachusetts']) .

Jei teks toliau naudotis pavadinti () tampa pernelyg erzinantis, netgi galite padaryti šiek tiek funkcijų iš savo paieškos lentelės:

get_state_fips <- funkcija (būsena, lookupvector = getfips) {

„fipscode“ <- nepavadinti („lookupvector“ [būsena])

grįžti (fipscode)

}

Čia aš turiu du argumentus savo funkcijai. Vienas yra mano „raktas“, šiuo atveju - valstybės pavadinimas; kitas yra lookvektorius, kuris pagal nutylėjimą yra mano getfips vektorius.

Ir jūs galite pamatyti, kaip aš naudoju šią funkciją. Tai tik funkcijos pavadinimas su vienu argumentu, valstybės pavadinimas: get_state_fips („Niujorkas“) .

Galiu padaryti funkciją, kuri atrodo šiek tiek bendresnė, pvz

get_value <- funkcija (mykey, mylookupvector) {

myvalue <- mylookupvector [mykey]

myvalue <- nepavadinti (myvalue)

grąžinti (myvalue)

}

Jis turi bendresnį funkcijos pavadinimą, get_value (); bendresnis pirmo argumento pavadinimas, mykey, ir antrasis mylookupvector tai nieko nenumato.

Tai tas pats, ką aš dariau visą laiką: gavau vertę iš paieškos vektoriaus lookvvector ['raktas'] ir tada paleisti pavadinti () funkcija. Bet visa tai apgaubta funkcijos dalimi. Taigi, tai vadinti yra kiek elegantiškiau.

Tą funkciją galiu naudoti su bet kokiu savo sukurtu vektoriu. Čia aš naudoju jį su Arkanzasu ir savo gauti pašto kodą vektorius:get_value („Arkanzasas“, „getpostalcode“) .

Lengva paieška R! Tiesiog nepamirškite, kad vardai turi būti unikalūs. Galite pakartoti vertybes, bet ne raktai.

Pirmą kartą šią idėją pamačiau prieš daugelį metų Hadley Wickham‘e Išplėstinė R knyga. Aš vis dar daug naudoju ir tikiuosi, kad jums taip pat bus naudinga.

Kodas, skirtas sukurti duomenų rėmelį su pašto santrumpomis

postal_df <- data.frame (stringsAsFactors = FALSE,

Valstybė = c („Alabama“, „Aliaska“, „Arizona“, „Arkanzasas“, „Kalifornija“,

„Koloradas“, „Konektikutas“, „Delaveras“, „Florida“, „Džordžija“,

„Havajai“, „Aidahas“, „Ilinojus“, „Indiana“, „Ajova“, „Kanzasas“,

„Kentukis“, „Luiziana“, „Meinas“, „Merilandas“, „Masačusetsas“,

„Mičiganas“, „Minesota“, „Misisipė“, „Misūris“, „Montana“,

„Nebraska“, „Nevada“, „Naujasis Hampšyras“, „Naujasis Džersis“, „Naujoji Meksika“,

„Niujorkas“, „Šiaurės Karolina“, „Šiaurės Dakota“, „Ohajas“,

„Oklahoma“, „Oregonas“, „Pensilvanija“, „Rodo sala“, „Pietų Karolina“,

„Pietų Dakota“, „Tenesis“, „Teksasas“, „Juta“, „Vermontas“,

„Virginia“, „Washington“, „West Virginia“, „Wisconsin“, „Wyoming“),

Pašto kodas = c („AL“, „AK“, „AZ“, „AR“, „CA“, „CO“, „CT“, „DE“, „FL“, „GA“,

„HI“, „ID“, „IL“, „IN“, „IA“, „KS“, „KY“, „LA“, „ME“, „MD“,

"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ",

„NM“, „NY“, „NC“, „ND“, „OH“, „Gerai“, „OR“, „PA“, „RI“, „SC“, „SD“,

„TN“, „TX“, „UT“, „VT“, „VA“, „WA“, „WV“, „WI“, „WY“)

)

Kodas, skirtas sukurti duomenų rėmą su FIPS kodais

fipsdf <- data.frame (valstija = c ("Alabama", "Aliaska", "Arizona", "Arkanzasas",

„Kalifornija“, „Koloradas“, „Konektikutas“, „Delaveras“, „Florida“,

„Džordžija“, „Havajai“, „Aidahas“, „Ilinojus“, „Indiana“, „Ajova“,

„Kanzasas“, „Kentukis“, „Luiziana“, „Meinas“, „Merilandas“, „Masačusetsas“,

„Mičiganas“, „Minesota“, „Misisipė“, „Misūris“, „Montana“,

„Nebraska“, „Nevada“, „Naujasis Hampšyras“, „Naujasis Džersis“, „Naujoji Meksika“,

„Niujorkas“, „Šiaurės Karolina“, „Šiaurės Dakota“, „Ohajas“, „Oklahoma“,

„Oregonas“, „Pensilvanija“, „Rodo sala“, „Pietų Karolina“, „Pietų Dakota“,

„Tenesis“, „Teksasas“, „Juta“, „Vermontas“, „Virdžinija“, „Vašingtonas“,

„Vakarų Virdžinija“, „Viskonsinas“, „Vajomingas“), FIPS = c („01“, „02“,

"04", "05", "06", "08", "09", "10", "12", "13", "15", "16", "17",

"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28",

"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",

"40", "41", "42", "44", "45", "46", "47", "48", "49", "50", "51",

„53“, „54“, „55“, „56“), eilutėsAsFactors = FALSE)

$config[zx-auto] not found$config[zx-overlay] not found