Programavimas

R pamoka: kaip importuoti duomenis į R

Gaukite visą knygą
Praktinis R masinės komunikacijos ir žurnalistikos RNR, 59,95 USD. Žr

Šis straipsnis buvo ištrauktas iš „Praktinės masinės komunikacijos ir žurnalistikos R“ leidėjui leidus. © 2019 „Taylor & Francis Group, LLC“.

Prieš analizuodami ir vizualizuodami duomenis, turite juos perkelti į R. Yra keli būdai tai padaryti, priklausomai nuo to, kaip jūsų duomenys yra suformatuoti ir kur jie yra.

Paprastai funkcija, kurią naudojate duomenims importuoti, priklauso nuo duomenų failo formato. Pavyzdžiui, bazėje R galite importuoti CSV failą naudodami skaityti.csv (). Hadley Wickhamas sukūrė paketą, pavadintą „readxl“, kuris, kaip galite tikėtis, turi funkciją skaityti „Excel“ failuose. Yra dar vienas paketas - „Google“ skaičiuoklės, skirtas duomenims iš „Google“ skaičiuoklių paimti.

Bet jei nenorite viso to prisiminti, yra rio.

Rio magija

„„ Rio “tikslas yra kuo lengviau padaryti duomenų failų įvesties / išvesties [importo / išvesties] R raidę įgyvendinant tris paprastas funkcijas Šveicarijos armijos peilių stiliumi“, sakoma projekto „GitHub“ puslapyje. Tos funkcijos yra importuoti (), eksportas ()ir Paversti().

Taigi, „rio“ paketas turi tik vieną funkciją, kurią galima perskaityti daugelyje skirtingų tipų failų: importuoti (). Jei tu importuoti („myfile.csv“), ji žino, kad naudodama funkciją gali skaityti CSV failą. importuoti ("myspreadsheet.xlsx") veikia taip pat. Tiesą sakant, „Rio“ tvarko daugiau nei dvi dešimtis formatų, įskaitant skirtukais atskirtus duomenis (su plėtiniu .tsv), JSON, „Stata“ ir fiksuoto pločio formato duomenis (.fwf).

Šiai pamokai reikalingi paketai

  • Rio
  • htmltab
  • skaitytixl
  • googlesheets
  • pacmanas
  • Durininkas
  • rmiscutils (pm GitHub) arba readr
  • tibble

Išanalizavę duomenis, jei norite išsaugoti rezultatus kaip CSV, „Excel“ skaičiuoklę ar kitus formatus, „Rio“ eksportas () funkcija gali tai išspręsti.

Jei dar neturite „rio“ paketo savo sistemoje, įdiekite jį dabar naudodami install.packages („Rio“).

Aš nustatiau keletą pavyzdinių duomenų su Bostono žiemos sniego duomenimis. Galite pereiti į //bit.ly/BostonSnowfallCSV ir dešiniuoju pelės mygtuku spustelėkite, jei norite išsaugoti failą kaip BostonWinterSnowfalls.csv dabartiniame R projekto darbo kataloge. Tačiau vienas iš scenarijų punktų yra pakeisti rankinį darbą - nuobodų ar kitokį - lengvai atkuriama automatika. Užuot spustelėję atsisiųsti, galite naudoti R Atsisiųsti failą funkcija su sintakse download.file ("url", "destinationFileName.csv"):

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv")

Tai daro prielaidą, kad jūsų sistema peradresuos iš to „Bit.ly“ URL nuorodos ir sėkmingai ras tikrąjį failo URL //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv. Retkarčiais kyla problemų pasiekiant žiniatinklio turinį senuose „Windows“ kompiuteriuose. Jei turite vieną iš tų ir ši „Bit.ly“ nuoroda neveikia, galite pakeisti tikrąjį „Bit.ly“ nuorodos URL. Kita galimybė yra atnaujinti „Windows“ kompiuterį į „Windows 10“, jei įmanoma, kad sužinotumėte, ar tai pavyksta.

Jei norite, kad „Rio“ galėtų tiesiog importuoti duomenis tiesiogiai iš URL, iš tikrųjų taip gali būti, ir aš tai aptarsiu kitame skyriuje. Esmė tai skyriuje išmokti dirbti su vietine byla.

Turėdami bandomąjį failą savo vietinėje sistemoje, galite įkelti šiuos duomenis į R objektą, vadinamą „snowdata“, su kodu:

sniego duomenys <- rio :: import ("BostonWinterSnowfalls.csv")

Atminkite, kad įmanoma, kad „Rio“ paprašys iš naujo atsisiųsti failą dvejetainiu formatu, tokiu atveju turėsite paleisti

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv", mode = "wb")

Būtinai naudokite „RStudio“ skirtuko užbaigimo parinktis. Jei rašote Rio :: ir palaukite, gausite visų galimų funkcijų sąrašą. Tipas sniego Palaukite ir turėtumėte pamatyti visą savo objekto pavadinimą. Naudokite rodyklių aukštyn ir žemyn mygtukus, kad pereitumėte tarp automatinio užbaigimo pasiūlymų. Kai bus pažymėta norima parinktis, paspauskite klavišą Tab (arba Enter), kad prie scenarijaus būtų pridėtas visas objekto ar funkcijos pavadinimas.

Turėtumėte pamatyti objektą sniego duomenys pasirodys jūsų aplinkos skirtuke viršutiniame dešiniajame „RStudio“ skydelyje. (Jei toje viršutinėje dešiniojoje srityje vietoj „Aplinka“ rodoma komandos istorija, pasirinkite skirtuką Aplinka.)

„Taylor & Francis Group“

sniego duomenys turėtų parodyti, kad jame yra 76 „obs.“ - stebėjimai arba eilutės, ir du kintamieji arba stulpeliai. Jei spustelėsite rodyklę kairėje sniego duomenys Norėdami išplėsti sąrašą, pamatysite du stulpelių pavadinimus ir kiekvieno stulpelio duomenų tipą. Žiema yra simbolių eilutės ir Iš viso stulpelis yra skaitinis. Aplinkos srityje taip pat turėtumėte matyti kelias pirmąsias kiekvieno stulpelio reikšmes.

„Taylor & Francis Group“

Spustelėkite žodį sniego duomenys skirtuke Aplinka, kad jūsų duomenys būtų labiau panašūs į skaičiuoklę. Tą patį vaizdą galite gauti iš R konsolės naudodami komandą Rodinys (sniego duomenys) (tai turi būti didžiosios raidės V rodinyje -vaizdas neveiks). Pastaba: sniego duomenys nėra kabutėse, nes turite omenyje R objektas jūsų aplinkoje. Viduje konors rio :: importas komanda anksčiau, BostonWinterSnowfalls.csv yra kabutėse, nes tai nėra R objektas; tai ne R raidės failo simbolių eilutės pavadinimas.

„Taylor & Francis Group“

Šis rodinys turi keletą panašių į skaičiuokles elgesio būdų. Spustelėkite stulpelio antraštę, kad ji būtų rūšiuojama pagal to stulpelio reikšmes didėjimo tvarka; spustelėkite tą pačią stulpelio antraštę antrą kartą, jei norite rūšiuoti mažėjančia tvarka. Yra paieškos laukelis, kuriame rasite eilutes, atitinkančias tam tikrus simbolius.

Jei spustelėsite filtro piktogramą, gausite kiekvieno stulpelio filtrą. Žiema simbolių stulpelis veikia taip, kaip galite tikėtis, filtruodamas visas eilutes, kuriose yra jūsų įvestų simbolių. Jei spustelėsite Iš viso skaitmeninio stulpelio filtras, tačiau senesnėse „RStudio“ versijose rodomas slankiklis, o naujesnėse - histograma ir filtravimo laukelis.

Importuokite failą iš žiniatinklio

Jei norite atsisiųsti ir importuoti failą iš žiniatinklio, galite tai padaryti, jei jis yra viešai prieinamas ir tokiu formatu kaip „Excel“ ar CSV. Bandyti

snowdata <- rio :: import ("// bit.ly/BostonSnowfallCSV", formatas)

Daugelis sistemų gali sekti peradresavimo URL į failą net ir tada, kai pirmą kartą jums pateikia klaidos pranešimą, jei tik nurodote formatą kaip „csv“ nes failo pavadinimo čia nėra .csv. Jei jūsų neveiks, naudokite URL //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv.

„rio“ taip pat gali importuoti gerai suformatuotas HTML lenteles iš tinklalapių, tačiau lentelės turi būti nepaprastai gerai suformatuotas. Tarkime, kad norite atsisiųsti lentelę, kurioje aprašyti Nacionalinės orų tarnybos sniego audros sunkumo įvertinimai. Nacionalinių informacijos apie aplinką centrų regioninio sniego rodyklės puslapyje yra tik viena labai gerai parengta lentelė, todėl toks kodas turėtų veikti:

rsi_description <- rio :: import ("//www.ncdc.noaa.gov/snow-and-ice/rsi/", format = "html")

Dar kartą atkreipkite dėmesį, kad šiuo atveju turite įtraukti formatą format = "html" . nes pats URL nenurodo, koks tai failas. Jei URL buvo failo pavadinimas su .html pratęsimas, Rio žinotų.

Tačiau realiame gyvenime žiniatinklio duomenys retai pasirodo tokia tvarkinga, izoliuota forma. Geras variantas tais atvejais, kurie nėra taip gerai sukurti, dažnai yra „htmltab“ paketas. Įdiekite jį naudodami install.packages ("htmltab"). Paketo funkcija, skirta HTML lentelės skaitymui, taip pat vadinama htmltab. Bet jei paleisite tai:

library (htmltab) citytable <- htmltab ("// lt.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (citytable)

matote, kad neturite teisingos lentelės, nes duomenų rėmelyje yra vienas objektas. Nes nenurodžiau kuri lentelę, ji ištraukė pirmąją HTML lentelę puslapyje. Tai neatsitiko to, kurio noriu. Nenoriu importuoti visų puslapio lentelių, kol nerandu tinkamos, bet, laimei, turiu „Chrome“ plėtinį „Table Capture“, kuris leidžia man peržiūrėti puslapyje esančių lentelių sąrašą.

Paskutinį kartą tikrindamas norėjau 5 lentelės su daugiau nei 300 eilučių. Jei tai jums dabar netinka, pabandykite „Chrome“ naršyklėje įdiegti „Table Capture“, kad patikrintumėte, kurią lentelę norite atsisiųsti.

Pabandysiu dar kartą, nurodydamas 5 lentelę ir tada pamatysiu, kokie stulpelių pavadinimai yra naujajame miesto lentelėje. Atkreipkite dėmesį, kad šiame kode aš įdėjau miesto lentelė <- htmltab () komandą ant kelių eilučių. Tai reiškia, kad neperžengė ribų - viską galite laikyti vienoje eilutėje. Jei nuo šio straipsnio paskelbimo lentelės numeris pasikeitė, pakeiskite kuri = 5 su teisingu skaičiumi.

Užuot naudoję „Wikipedia“ puslapį, galite pakeisti „Wikipedia“ URL mano sukurto failo kopijos URL. Tas failas yra //bit.ly/WikiCityList. Norėdami naudoti tą versiją, įveskite bit.ly/WikiCityList į naršyklę, tada nukopijuokite ilgą URL, į kurį jis nukreipia, ir naudokite kad vietoj Vikipedijos URL žemiau esančiame kode:

library (htmltab) citytable <- htmltab ("// lt.wikipedia.org/wiki/List_of_United_States_cities_by_population", kuris = 5) kolnamai (citytable)

Iš kur aš žinojau kuri ar reikėjo argumento nurodyti lentelės numerį? Aš perskaičiau htmltab pagalbos failas naudojant komandą ? htmltab. Tai apėmė visus galimus argumentus. Aš nuskanavau galimybes ir „kuri vieno ilgio vektorius dokumento lentelei identifikuoti “atrodė teisingai.

Taip pat atkreipkite dėmesį, kad aš naudojau Colnames (miesto lentelė) vietoj vardai (miesto lentelė) norėdami pamatyti stulpelių pavadinimus. Bet kuri veiks. R bazėje taip pat yravietovardžiai () funkcija.

Šiaip ar taip, tų lentelių rezultatai yra daug geresni, nors matai iš bėgimo str (miesto lentelė) kad pora stulpelių, kurie turėtų būti skaičiai, atsirado kaip simbolių eilutės. Tai galite pamatyti tiek chr šalia stulpelio pavadinimo ir kabučių aplink tokias vertes kaip 8,550,405.

Tai yra vienas iš mažų R susierzinimų: R paprastai to nesupranta 8,550 yra skaičius. Aš pats sprendžiau šią problemą, rašydamas savo funkciją į savo „rmiscutils“ paketą, kad visas tas „simbolių eilutes“, kurios iš tikrųjų yra skaičiai su kableliais, vėl paverčiau skaičiais. Kiekvienas gali atsisiųsti paketą iš „GitHub“ ir juo naudotis.

Populiariausias paketų įdiegimo iš „GitHub“ būdas yra naudoti paketą, vadinamą devtools. „devtools“ yra nepaprastai galingas paketas, skirtas žmonėms, norintiems parašyti savo savo paketus ir jame yra keli būdai, kaip įdiegti paketus iš kitų vietų, išskyrus CRAN. Tačiau, norint įdiegti „devtools“, reikia įdiegti keletą papildomų veiksmų, palyginti su įprastu paketu, ir aš noriu palikti erzinančias sistemos administratoriaus užduotis, kol to tikrai nereikia.

Tačiau „pacman“ paketas taip pat įdiegia paketus iš ne CRAN šaltinių, tokių kaip „GitHub“. Jei dar to nepadarėte, įdiekite „Pacman“ install.packages („pacman“).

pacmano p_install_gh ("vartotojo vardas / packagerepo") funkcija įdiegiama iš „GitHub“ atsarginės kopijos.

p_load_gh ("vartotojo vardas / packagerepo")apkrovos paketą į atmintį, jei jis jau yra jūsų sistemoje, ir jis pirmiausia įdiegiamas, tada įkeliamas paketas iš „GitHub“, jei paketo nėra vietoje.

Mano „rmisc“ paslaugų paketą galite rasti adresu smach / rmiscutils. Bėk pacman :: p_load_gh ("smach / rmiscutils") įdiegti mano paketą „rmiscutils“.

Pastaba: Alternatyvus paketas, skirtas paketams įdiegti iš „GitHub“, vadinamas nuotolinio valdymo pultais, kuriuos galite įdiegti perinstall.packages ("pulteliai"). Pagrindinis jo tikslas yra įdiegti paketus iš nuotolinių saugyklų, tokių kaip „GitHub“. Galite peržiūrėti pagalbos failą naudodami pagalba (paketas = "pulteliai").

Galbūt pats slidžiausias yra paketas, vadinamas „githubinstall“. Jo tikslas - atspėti atpirkimo vietą, kur yra paketas. Įdiekite jį perinstall.packages ("githubinstall"); tada galite įdiegti mano paketą „rmiscutils“ naudodamigithubinstall :: gh_install_packages ("rmiscutils"). Jūsų klausiama, ar norite įdiegti paketą smach / rmisutils (tu darai).

Dabar, kai įdiegėte mano funkcijų kolekciją, galite naudoti „My“ skaičius_su bendrovėmis () funkcija pakeisti simbolių eilutes, kurios turėtų būti skaičiai, atgal į skaičius. Primygtinai siūlau prie duomenų rėmelio pridėti naują stulpelį, užuot modifikavus esamą stulpelį - tai yra gera duomenų analizės praktika, nesvarbu, kokią platformą naudojate.

Šiame pavyzdyje pavadinsiu naują stulpelį PopEst2017. (Jei lentelė buvo atnaujinta nuo tada, naudokite atitinkamus stulpelių pavadinimus.)

biblioteka (rmiscutils) citytable $ PopEst2017 <- number_with_commas (citytable $ „2017 sąmata“)

Beje, mano paketas „rmiscutils“ nėra vienintelis būdas tvarkyti importuotus numerius, kurie turi kablelius. Po to, kai sukūriau savo „rmiscutils“ paketą ir jo skaičius_su bendrovėmis () funkcija, gimė paketas „tidyverse readr“. „readr“ taip pat apima funkciją, kuri simbolių eilutes paverčia skaičiais, parse_number ().

Įdiegę „readr“, 2017 m. Įvertinimo stulpelyje galite generuoti skaičius naudodami „readr“:

citytable $ PopEst2017 <- readr :: parse_number („citytable $“ 2017 m. sąmata)

Vienas privalumas readr :: parse_number () yra tai, kad jūs galite apibrėžti savo lokalė () kontroliuoti tokius dalykus kaip kodavimas ir dešimtainiai ženklai, kurie gali būti įdomūs ne JAV gyvenantiems skaitytojams. Bėk ? parse_number daugiau informacijos.

Pastaba: jei nenaudojote skirtuko užbaigimo 2017 m. Įvertinimo stulpelyje, galbūt kilo problemų dėl to stulpelio pavadinimo, jei vykdant šį kodą jame yra tarpas. Mano aukščiau esančiame kode pastebėkite, kad yra vienos atgalinės kabutės (`) aplink stulpelio pavadinimą. Taip yra todėl, kad esamame pavadinime buvo tarpas, kurio neturėtumėte turėti R. Tas stulpelio pavadinimas turi dar vieną problemą: jis prasideda skaičiumi, taip pat paprastai R ne-ne. „RStudio“ tai žino ir automatiškai prideda reikalingas atgalines kabutes prie vardo su automatinio pildymo kortele.

Premijos patarimas: Yra „R“ paketas (žinoma, kad yra!), Vadinamas sargu, kuris gali automatiškai ištaisyti nemalonius stulpelių pavadinimus, importuotus iš netinkamo R duomenų šaltinio. Įdiekite jį naudodami install.packages („sargas“). Tada galite sukurti naujus švarių stulpelių pavadinimus naudodami sargų valyti_vardai () funkcija.

Dabar aš sukursiu visiškai naują duomenų rėmą, užuot keisdamas stulpelių pavadinimus savo pradiniame duomenų rėmelyje, ir pradinius duomenis paleisiu tvarkytojo „clean_names“). Tada patikrinkite duomenų rėmelių stulpelių pavadinimus naudodami vardai ():

citytable_cleaned <- sargas :: švarūs_vardai (citytable)

vardai (citytable_cleaned)

Matote, kad tarpai pakeisti į pabraukimus, kurie yra teisėti R kintamųjų pavadinimuose (kaip ir punktai). Ir visi stulpelių pavadinimai, kurie anksčiau prasidėdavo skaičiumi, dabar turi x pradžioje.

Jei nenorite švaistyti atminties turėdami dvi iš esmės tų pačių duomenų kopijas, galite pašalinti R objektą iš savo darbo seansorm () funkcija: rm (miesto lentelė).

Importuoti duomenis iš paketų

Yra keli paketai, leidžiantys pasiekti duomenis tiesiai iš R. Vienas iš jų yra kvantmodas, leidžiantis kai kuriuos JAV vyriausybės ir finansinius duomenis traukti tiesiai į R.

Kitas yra tinkamai pavadintas „Weatherdata“ paketas CRAN. Jis gali gauti duomenis iš „Weather Underground API“, kuriame yra informacijos apie daugelį pasaulio šalių.

„Rnoaa“ paketas, „rOpenSci“ grupės projektas, apima kelis skirtingus JAV Nacionalinės vandenynų ir atmosferos administracijos duomenų rinkinius, įskaitant kasdienio klimato, plūduro ir audros informaciją.

Jei jus domina valstijos ar vietos valdžios duomenys JAV ar Kanadoje, galbūt norėsite patikrinti „RSocrata“ ir sužinoti, ar jus dominanti agentūra skelbia duomenis ten. Aš dar neradau išsamaus visų galimų „Socrata“ duomenų rinkinių sąrašo, tačiau yra paieškos puslapis adresu //www.opendatanetwork.com. Vis dėlto būkite atsargūs: kartu su oficialiais vyriausybės duomenimis yra bendruomenės įkeltų rinkinių, todėl prieš pasikliaudami duomenų rinkinio praktika, patikrinkite duomenų rinkinio savininką ir įkėlimo šaltinį. Rezultate esantis „ODN duomenų rinkinys“ reiškia, kad tai yra failas, kurį kažkas įkėlė plačiajai visuomenei. Oficialūs vyriausybės duomenų rinkiniai paprastai gyvena tokiais URL kaip //data.CityOrStateName.gov ir//data.CityOrStateName.us.

Norėdami gauti daugiau duomenų importavimo paketų, žr. Mano ieškomą diagramą šiuo adresu: //bit.ly/RDataPkgs. Jei dirbate su JAV vyriausybės duomenimis, jums gali būti ypač įdomūs surašymai ir tvarkos surašymai, kurie abu naudoja JAV surašymo biuro duomenis. Kiti naudingi vyriausybės duomenų paketai apima „eu.us.opendata“ iš JAV ir Europos Sąjungos vyriausybių, kad būtų lengviau palyginti duomenis abiejuose regionuose, ir Kanados surašymo duomenų surašymą.

Kai duomenys nėra idealiai suformatuoti

Visais šiais pavyzdiniais duomenų atvejais duomenys buvo ne tik gerai suformatuoti, bet ir idealūs: kai juos radau, jie buvo puikiai sukonstruoti R. Ką aš noriu pasakyti tuo? Jis buvo stačiakampis, o kiekviena langelis turėjo vieną vertę, o ne sujungtus langelius. Pirmoje eilutėje buvo stulpelių antraštės, o ne, tarkime, pavadinimo eilutė dideliu šriftu keliose ląstelėse, kad atrodytų gražiai - arba visai nėra stulpelių antraščių.

Tvarkyti netvarkingus duomenis, deja, gali būti gana sudėtinga. Tačiau yra keletas bendrų problemų, kurias lengva išspręsti.

Pradžios eilutės, kurios nėra duomenų dalis. Jei žinote, kad pirmose keliose „Excel“ skaičiuoklės eilutėse nėra norimų duomenų, galite liepti „Rio“ praleisti vieną ar daugiau eilučių. Sintaksė yra rio :: import ("mySpreadsheet.xlsx", praleisti = 3) išskirti pirmąsias tris eilutes. praleisti užima sveiką skaičių.

Skaičiuoklėje stulpelių pavadinimų nėra. Numatytasis importavimas daro prielaidą, kad pirmoji jūsų lapo eilutė yra stulpelių pavadinimai. Jei jūsų duomenys neturi turėti antraštes, pirmoji duomenų eilutė gali tapti jūsų stulpelių antraštėmis. Norėdami to išvengti, naudokite rio :: import ("mySpreadsheet.xlsx", col_names = FALSE) taigi R sugeneruos numatytas X0, X1, X2 ir pan. antraštes. Arba naudokite tokią sintaksę kaip rio :: import ("mySpreadsheet.xlsx", col_names = c ("Miestas", "Valstija", "Gyventojai")) norėdami nustatyti savo stulpelių pavadinimus.

Jei skaičiuoklėje yra keli skirtukai, kuri argumentas nepaiso numatytojo skaitymo pirmame darbalapyje. rio :: import ("mySpreadsheet.xlsx", kuris = 2) rašoma antrame darbalapyje.

Kas yra duomenų rėmas? O ką tu gali padaryti su vienu?

rio importuoja skaičiuoklę arba CSV failą kaip R duomenų rėmas. Kaip sužinoti, ar turite duomenų rėmą? Jeigu sniego duomenys, klasė (sniego duomenys) grąžina objekto klasę arba tipą. str (sniego duomenys) taip pat pasakoja jums klasę ir prideda šiek tiek daugiau informacijos. Daug informacijos, kurią matote str () yra panašus į tai, ką matėte šiame pavyzdyje „RStudio“ aplinkos srityje: sniego duomenys turi 76 stebėjimus (eilutes) ir du kintamuosius (stulpelius).

Duomenų rėmeliai yra šiek tiek panašūs į skaičiuokles, nes juose yra stulpeliai ir eilutės. Tačiau duomenų rėmai yra labiau struktūrizuoti. Kiekvienas duomenų rėmelio stulpelis yra R vektorius, tai reiškia kad kiekvienas stulpelio elementas turi būti to paties tipo. Viename stulpelyje gali būti visi skaičiai, o kitame - visos eilutės, tačiau stulpelyje duomenys turi būti nuoseklūs.

Jei turite duomenų rėmelių stulpelį su 5, 7, 4 ir „būsimos vertės“ vertėmis, R nebus tiesiog nelaimingas ir suteiks klaidą. Vietoj to, visos vertės bus priverstos būti to paties tipo. Kadangi „ateities vertė“ negali būti paversta skaičiumi, 5, 7 ir 4 galiausiai bus paversti simbolių eilutėmis "5", "7"ir "4". Paprastai to nenorite, todėl svarbu žinoti, kokio tipo duomenys yra kiekviename stulpelyje. Viena klaidinga simbolių eilutės vertė 1000 skaičių stulpelyje gali paversti visa tai simboliais. Jei norite numerių, įsitikinkite, kad juos turite!

R turi būdų, kaip nurodyti trūkstamus duomenis, kurie nesukels likusių jūsų stulpelių: NA reiškia „nėra“.

Duomenų rėmeliai yra stačiakampiai: kiekvienoje eilutėje turi būti vienodas įrašų skaičius (nors kai kurie gali būti tušti), o kiekviename stulpelyje turi būti vienodas elementų skaičius.

„Excel“ skaičiuoklės stulpeliai paprastai nurodomi raidėmis: A stulpelis, B stulpelis ir kt. Naudodami sintaksę, galite nurodyti duomenų rėmelio stulpelį su jo pavadinimu. dataFrameName $ columnName. Taigi, jei rašote snowdata $ Iš viso ir paspauskite Enter, pamatysite visas reikšmes Iš viso stulpelį, kaip parodyta toliau pateiktame paveikslėlyje. (Štai kodėl paleidus str (sniego duomenys) komandą, prieš kiekvieno stulpelio pavadinimą yra dolerio ženklas.)

„Taylor & Francis Group“

Primename, kad tie skliaustuose esantys numeriai, esantys sąrašo kairėje, nėra duomenų dalis; jie tik jums sako, kokia pozicija prasideda kiekviena duomenų eilutė. [1] reiškia, kad eilutė prasideda pirmuoju vektoriaus elementu, [10] dešimtas ir t.

„RStudio“ skirtuko užbaigimas veikia su duomenų rėmelių stulpelių pavadinimais, taip pat objektų ir funkcijų pavadinimais. Tai yra gana naudinga norint įsitikinti, kad neteisingai parašėte stulpelio pavadinimą ir nesulaužėte scenarijaus. Be to, įrašant tekstą sutaupoma, jei turite ilgų stulpelių pavadinimų.

Tipas sniego duomenys $ ir palaukite, tada pamatysite visų stulpelių pavadinimų sąrašą sniego duomenyse.

Stulpelį lengva pridėti prie duomenų rėmelio. Šiuo metu Iš viso stulpelyje rodomas žiemos sniegas coliais. Norėdami pridėti stulpelį, kuriame nurodoma bendra metrinė suma, galite naudoti šį formatą:

sniego duomenys $ metrai <- sniego duomenys $ iš viso * 0.0254

Naujojo stulpelio pavadinimas yra kairėje, o dešinėje yra formulė. Programoje „Excel“ galbūt naudojote = A2 * 0,0254 ir tada nukopijavo formulę stulpelyje. Naudodami scenarijų neturite jaudintis, ar tinkamai pritaikėte formulę visoms stulpelio reikšmėms.

Dabar pažvelk į savo sniego duomenys objektą skirtuke Aplinka. Jis turėtų turėti trečią kintamąjį, Skaitikliai.

Nes sniego duomenys yra duomenų rėmelis, jis turi tam tikras duomenų rėmelio ypatybes, kurias galite pasiekti naudodami komandinę eilutę. dabar (sniego duomenys) pateikia eilučių skaičių ir ncol (sniego duomenys) stulpelių skaičius. Taip, galite tai peržiūrėti „RStudio“ aplinkoje, kad pamatytumėte, kiek yra stebėjimų ir kintamųjų, tačiau tikriausiai bus atvejų, kai norėsite tai žinoti kaip scenarijaus dalį. Colnames (sniego duomenys) arba vardai (sniego duomenys) suteikia jums vardą sniego duomenys stulpeliai. vietovardžiai (sniego duomenys) suteiksite eilučių pavadinimus (jei jų nenustatyta, bus numatytos eilutės numerio simbolių eilutės, pvz., "1", "2", "3", ir pan.).

Kai kurios iš šių specialių duomenų kadrų funkcijų, taip pat žinomos kaip metodai, ne tik suteikia jums informacijos, bet ir leidžia pakeisti duomenų rėmelio ypatybes. Taigi, vardai (sniego duomenys) nurodo stulpelių pavadinimus duomenų rėmelyje, bet

pavadinimai (sniego duomenys) <- c („Žiema“, „Sniego coliai“, „Sniego matuokliai“)

pokyčiai stulpelių pavadinimai duomenų rėmelyje.

Jums tikriausiai nereikės žinoti visų galimų duomenų rėmelio objekto metodų, bet jei jums įdomu, metodai (klasė = klasė (sniego duomenys)) juos rodo. Norėdami sužinoti daugiau apie bet kurį metodą, vykdykite įprastą pagalbos užklausą su klaustuku, pvz ? sujungti arba ? pogrupis.

Kai skaičius iš tikrųjų nėra skaičius

Pašto kodai yra geras „skaičių“ pavyzdys, kuris neturėtų būti laikomas tokiu. Nors tai yra techniškai skaitinė, nėra prasmės daryti tokius dalykus, kaip pridėti du pašto kodus kartu ar paimti vidutinį ZIP kodus bendruomenėje. Jei importuosite pašto kodo stulpelį, R greičiausiai pavers jį skaičių stulpeliu. O jei turite reikalų su Naujosios Anglijos sritimis, kuriose pašto kodai prasideda nuo 0, 0 dings.

Turiu skirtukais pažymėtą Bostono pašto kodų failą pagal rajonus, atsisiųstą iš Masačusetso vyriausybinės agentūros, adresu //raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt. Jei bandyčiau importuoti su užtrauktukai <- rio :: import ("bostonzips.txt"), pašto kodai būtų 2118, 2119 ir kt., o ne 02118, 02119 ir pan.

Čia padeda šiek tiek sužinoti apie pagrindinę „rio“ funkciją importuoti () funkcija naudoja. Šias pagrindines funkcijas galite rasti perskaitę importas pagalbos failas ? importas. Norėdami traukti skirtukais atskirtus failus, importas naudoja arba duona () iš duomenų. lentelės paketo arba bazinių R read.table () funkcija. ? perskaityti.stalas Pagalba sako, kad galite nurodyti stulpelių klases naudodami colClasses argumentas.

Sukurkite duomenų pakatalogį dabartiniame projekto kataloge, tada atsisiųskite failą bostonzips.txt

download.file ("// raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt", "data / bostonzips.txt")

Jei importuosite šį failą nurodydami abu stulpelius kaip simbolių eilutes, pašto kodai bus tinkamai suformuoti:

zips <- rio :: import ("data / bostonzips.txt", colClasses = c ("character" "," character ")) str (užtrauktukai)

Atkreipkite dėmesį, kad stulpelių klasės turi būti nustatomos naudojant c () funkcija, c („simbolis“, „simbolis“). Jei bandytum colClasses, "character", gausite klaidos pranešimą. Tai yra tipiška R pradedančiųjų klaida, tačiau tai neturėtų užtrukti c () įpročio.

Patarimas: kai kurie rašo patarimus: rašykite c („simbolis“, „simbolis“) nėra viskas taip sunku; bet jei turite skaičiuoklę su 16 stulpelių, kur pirmieji 14 turi būti simbolių eilutės, tai gali erzinti. R atstovas () funkcija gali padėti. atstovas (), kaip jau spėjote, pakartoja bet kokį daiktą, kurį jam suteikiate, kad ir kiek kartų pasakytumėte, naudodamas formatą atstovas (myitem, skaičius). atstovas („personažas“, 2) yra tas pats kaip c („simbolis“, „simbolis“), taigi colClasses = rep ("simbolis", 2) yra lygiavertis colClasses = c ("simbolis", "simbolis") . Ir, colClasses = c (rep („simbolis“, 14), rep („skaitmeninis“, 2)) nustato pirmuosius 14 stulpelių kaip simbolių eilutes, o paskutinius du - kaip skaičius. Visi stulpelių klasių pavadinimai čia turi būti kabutėse, nes pavadinimai yra simbolių eilutės.

Aš siūlau jums šiek tiek pažaisti atstovas () taigi priprantama prie formato, nes tai yra sintaksė, kurią naudoja ir kitos R funkcijos.

Lengvas duomenų pavyzdys

R yra su kai kuriais įmontuotais duomenų rinkiniais, kuriuos lengva naudoti, jei norite žaisti naudodamiesi naujomis funkcijomis ar kitomis programavimo technikomis. Jas taip pat daug naudoja žmonės, mokantys R, nes instruktoriai gali būti tikri, kad visi studentai pradeda tuos pačius duomenis tiksliai tuo pačiu formatu.

Tipas duomenys () norėdami pamatyti galimus integruotus duomenų rinkinius bazėje R ir visus šiuo metu įkeltus paketus. duomenys (paketas = .paketai (visi. prieinami = TIESA)) R bazėje rodomi visi galimi paketų, kurie yra įdiegti jūsų sistemoje, duomenų rinkiniai, neatsižvelgiant į tai, ar jie įkeliami į atmintį jūsų dabartinės darbo sesijos metu.

Galite gauti daugiau informacijos apie duomenų rinkinį taip pat, kaip ir pagalbos dėl funkcijų: ? duomenų rinkinio pavadinimas arba pagalba („duomenų rinkinio pavadinimas“). mtcars ir vilkdalgis yra vieni tų, kuriuos mačiau naudojamus labai dažnai.

Jei rašote mtcars, visas „mtcars“ duomenų rinkinys atspausdintas jūsų konsolėje. Galite naudoti galva() funkcija pažvelgti į kelias pirmąsias eilutes su galva (mtcars).

Jei norite, galite išsaugoti tą duomenų rinkinį kitame kintamajame tokiu formatu kaip cardata <- mtcars.

Arba vykdydami duomenų funkciją naudodami duomenų rinkinio pavadinimą, pvz duomenys (mtcars), įkelia duomenų rinkinį į jūsų darbo aplinką.

Vienas iš įdomiausių žurnalistų duomenų rinkinių pavyzdžių yra „penkių akių“ paketas, kuriame yra duomenys iš istorijų, paskelbtų „FiveThirtyEight.com“ svetainėje. Paketą sukūrė keli mokslininkai, pasitarę su „FiveThirtyEight“ redaktoriais; jis sukurtas kaip šaltinis studentų statistikos mokymui.

Fasuoti duomenys gali būti naudingi, o kai kuriais atvejais ir įdomūs. Tačiau tikrame pasaulyje galbūt nenaudojate duomenų, kurie yra taip patogiai supakuoti.

Rankiniu būdu sukurkite duomenų rėmelį naudodami R

Yra tikimybė, kad dažnai susidursite su duomenimis, kurie prasideda už R ribų, ir importuojate iš skaičiuoklės, CSV failo, API ar kito šaltinio. Tačiau kartais galbūt norėsite tiesiog įvesti nedidelį duomenų kiekį tiesiai į R arba kitaip sukurti duomenų rėmelį rankiniu būdu. Taigi greitai pažvelkime, kaip tai veikia.

R duomenų rėmeliai pagal numatytuosius nustatymus surenkami pagal stulpelius, o ne vienas eilutė tuo momentu. Jei norite surinkti greitą miesto rinkimų rezultatų duomenų rinkinį, galite sukurti kandidatų vardų vektorių, antrą vektorių su jų partijos priklausomybe ir tada jų balsų sumos vektorių:

kandidatai <- c („Smith“, „Jones“, „Write-ins“, „Blanks“)

partija <- c ("Demokratas", "Respublikonas", "", "")

balsų <- c (15248, 16723, 230, 5234)

Nepamirškite nenaudoti kablelių savo numeriuose, kaip galite padaryti „Excel“.

Norėdami sukurti duomenų rėmelį iš tų stulpelių, naudokite data.frame () funkcija ir sintaksės data.frame (1 stulpelis, 2 stulpelis, 3 stulpelis).

mano rezultatai <- data.frame (kandidatai, partija, balsai)

Patikrinkite jo struktūrą str ():

str (myresults)

Nors kandidatai ir partija vektoriai yra veikėjai, kandidatai ir partija duomenų rėmelių stulpeliai buvo paversti R objektų klase, vadinama veiksniais. Šiuo metu šiek tiek per daug piktžolių, kad įsigilintume į tai, kuo veiksniai skiriasi nuo veikėjų, išskyrus tai pasakyti

  1. Veiksniai gali būti naudingi, jei norite užsakyti elementus tam tikru, ne abėcėlės tvarka, grafikams ir kitiems tikslams, pavyzdžiui, Vargšas mažiau nei Šviesus mažiau nei Gerai mažiau nei Puiku.
  2. Veiksniai gali elgtis kitaip, nei kartais galite tikėtis. Aš rekomenduoju laikytis simbolių eilučių, nebent turite rimtų priežasčių konkrečiai norėti veiksnių.

Kurdami duomenų rėmelius galite nepažeisti simbolių eilutės pridėdami argumentą stringsAsFactors = NETIESA:

myresults <- data.frame (kandidatai, partija, balsai, eilutės „AsFactors = FALSE“) str („myresults“)

Dabar vertybės yra tokios, kokių tikėjotės.

Kuriant duomenų rėmelius reikia įspėti dar vieną dalyką: jei vienas stulpelis yra trumpesnis už kitą (-us), R kartais pakartos duomenis iš trumpesnio stulpelio -ar nenorite, kad taip atsitiktų.

Tarkime, kad sukūrėte rinkimų rezultatų stulpelius kandidatams ir partijoms, bet balsavimo rezultatus įvedėte tik Smithui ir Jonesui, o ne „Write-ins“ ir „Blanks“. Galite tikėtis, kad duomenų rėmelyje kiti du įrašai bus tušti, bet tu klystum. Išbandykite ir pamatykite sukurdami naują balsų vektorių tik su dviem skaičiais ir naudodami tą naują balsų vektorių kurdami kitą duomenų rėmelį:

balsų <- c (15248, 16723)

myresults2 <- data.frame (kandidatai, partija, balsai)

str (myresults2)

Teisingai, R pakartotinai panaudojo du pirmuosius skaičius, o tai tikrai yra ne ko norėtum. Jei pabandysite tai padaryti su trim skaičiais balsų vektoriuje, o ne dviem ar keturiais, R sukeltų klaidą. Taip yra todėl, kad kiekvieno įrašo negalima perdirbti tiek pat kartų.

Jei dabar galvojate: „Kodėl negaliu sukurti duomenų rėmelių, kurie eilutes automatiškai nekeičia į faktorius? Ir kodėl turiu nerimauti dėl duomenų rėmelių, kurie pakartotinai panaudos vieno stulpelio duomenis, jei pamirštu užpildyti visus duomenis? “ Hadley Wickhamas turėjo tą pačią mintį. Jo „Tibble“ paketas sukuria R klasę, dar vadinamą „Tibble“, kuri, jo teigimu, yra „šiuolaikinė duomenų rėmelių peržiūra. Jie išlaiko savybes, atlaikiusias laiko išbandymus, ir atsisako savybių, kurios anksčiau buvo patogios, bet dabar vargina “.

Jei tai jums patinka, įdiekite „tibble“ paketą, jei jo nėra jūsų sistemoje, tada pabandykite sukurti

myresults3 <- tibble :: tibble (kandidatai, partija, balsai)

ir gausite klaidos pranešimą, kad balsų stulpelis turi būti 4 keturi elementai arba vienas elementas ilgas (tibble () pakartos vieną elementą tiek kartų, kiek reikia, bet tik vienam elementui).

Įdėkite balsų stulpelį atgal į keturis įrašus, jei norite sukurti lentelę su šiais duomenimis:

biblioteka (tibble)

balsų <- c (15248, 16723, 230, 5234)

myresults3 <- tibble (kandidatai, partija, balsai)

str (myresults3)

Jis atrodo panašus į duomenų rėmą - iš tikrųjų jis yra duomenų rėmelį, tačiau su tam tikru ypatingu elgesiu, pavyzdžiui, kaip jis spausdinamas. Taip pat atkreipkite dėmesį, kad kandidatų stulpelis yra simbolių eilutės, o ne veiksniai.

Jei jums patinka toks elgesys, naudokitės lentelėmis. Tačiau atsižvelgiant į tai, kaip pažangūs įprasti duomenų rėmeliai išlieka R, vis tiek svarbu žinoti apie numatytąjį jų elgesį.

Duomenų eksportavimas

Dažnai po to, kai išsprendžiate duomenis R, norite išsaugoti rezultatus. Štai keletas būdų eksportuoti savo duomenis, kuriuos dažniausiai naudoju:

Išsaugoti CSV faile su rio :: export („myObjectName“, failas = „myFileName.csv“) ir į „Excel“ failą su rio :: export (myObjectName, file = "mano failo vardas.xlsx"). rio supranta, kokio failo formato norite, remdamasis failo vardo plėtiniu. Yra keletas kitų galimų formatų, įskaitant .tsv skirtukais atskirtiems duomenims, .json JSON ir .xml XML.

Išsaugokite dvejetainiame objekte R todėl būsimose sesijose lengva įkelti atgal į R. Yra du variantai.

Bendrasis sutaupyti() įrašo vieną ar daugiau objektų į failą, pvz išsaugoti (objectName1, objectName2, file = "manofilename.RData"). Norėdami perskaityti šiuos duomenis atgal į R, tiesiog naudokite komandą įkelti („myfilename.RData“) ir visi objektai grįžta tais pačiais pavadinimais ta pačia būsena, kurią turėjo anksčiau.

Taip pat galite išsaugoti vieną objektą faile naudodami saveRDS (myobject, file = "failo pavadinimas.rds"). Logiška prielaida, kad „loadRDS“ nuskaitys failą atgal, bet komanda yra readRDS—Ir šiuo atveju buvo saugomi tik duomenys, ne objekto pavadinimas. Taigi, jums reikia perskaityti duomenis į naują objekto pavadinimą, pvz mydata <- readRDS ("failo vardas.rds").

Yra trečias būdas išsaugoti R objektą specialiai R: sugeneruoti R komandas, kurios atkurtų objektą, o ne objektą su galutiniais rezultatais. Pagrindinės R funkcijos, skirtos generuoti R failą objektui atkurti, yra dput () arba išpilti (). Tačiau aš randu rio :: export („myobject“, „mysavedfile.R“) dar lengviau prisiminti.

Galiausiai yra papildomų failų išsaugojimo būdų, optimizuojančių skaitymui, greičiui ar glaudinimui, kuriuos paminėjau papildomų išteklių skyriuje šio straipsnio pabaigoje.

R objektą taip pat galite eksportuoti į „Windows“ arba „Mac“ mainų sritį su „rio“: rio :: eksportas („myObjectName“, formatas). Taip pat galite importuoti duomenis į R iš mainų srities tokiu pačiu būdu: rio :: importas (failas).

Premija: Rio Paversti() funkcija leidžia - jūs atspėjote - konvertuoti vieno failo tipą į kitą, nereikia rankiniu būdu traukti duomenų į R ir tada iš jų. Žr. ?Paversti daugiau informacijos.

Paskutinis dalykas: „RStudio“ leidžia spustelėti, kad importuotumėte failą, visai nereikėdami rašyti kodo. Tai nėra kažkas, ko aš rekomenduoju, kol nesugebėsite importuoti iš komandinės eilutės, nes manau, kad svarbu suprasti kodą, susijusį su importavimu. Bet aš pripažįstu, kad tai gali būti patogu.

„RStudio“ apatiniame dešiniajame srities skirtuke Failai eikite į failą, kurį norite importuoti, ir spustelėkite jį. Pamatysite parinktį Peržiūrėti failą arba Importuoti duomenų rinkinį. Pasirinkite Importuoti duomenų rinkinį, kad pamatytumėte dialogo langą, kuriame peržiūrimi duomenys, leidžiama modifikuoti, kaip duomenys importuojami, ir peržiūrėsite sugeneruotą kodą.

Atlikite visus norimus pakeitimus ir spustelėkite Importuoti, o jūsų duomenys bus įtraukti į R.

Papildomi resursai

rio alternatyvos. Nors „Rio“ yra puikus Šveicarijos armijos failų tvarkymo peilis, gali būti atvejų, kai norėsite šiek tiek labiau kontroliuoti, kaip jūsų duomenys įtraukiami į R arba iš jų išsaugomi. Be to, buvo atvejų, kai turėjau iššūkių duomenų failą, kurį rio uždusino, bet kitas paketas galėjo jį tvarkyti. Keletas kitų funkcijų ir paketų, kuriuos galbūt norėsite ištirti:

  • R bazė skaityti.csv () ir read.table () importuoti tekstinius failus (naudokite ? skaityti.csv ir ? perskaityti.stalas gauti daugiau informacijos). stringsAsFactors = NETIESA yra reikalinga, jei norite, kad jūsų simbolių eilutės būtų simbolių eilutės. rašyti.csv () išsaugo CSV.
  • „Rio“ naudoja „Hadley Wickham“ „readxl“ paketą „Excel“ failams skaityti. Kita „Excel“ alternatyva yra „openxlsx“, kuri gali rašyti į „Excel“ failą ir jį skaityti. Peržiūrėkite „openxlsx“ paketo vinjetes, kad gautumėte informacijos apie eksportuojamų skaičiuoklių formatavimą.
  • Taip pat verta pažvelgti į Wickhamo „readr“ paketą kaip „tidyverso“ dalį. „readr“ apima CSV, skirtukais atskirtų, fiksuoto pločio, žiniatinklio žurnalų ir kelių kitų tipų failų skaitymo funkcijas. readr atspausdina kiekvieno stulpelio nustatytą duomenų tipą - sveikasis skaičius, simbolis, dvigubas (ne sveiki skaičiai) ir kt. Tai sukuria lenteles.

Importuoti tiesiai iš „Google“ skaičiuoklės. Naudodami „googlesheets“ paketą galite importuoti duomenis iš „Google“ skaičiuoklių skaičiuoklės, net jei ji yra privati, patvirtindami „Google“ paskyrą. Paketą galima įsigyti CRAN; įdiekite jį perinstall.packages („googlesheets“). Įkėlus jį su biblioteka („googlesheets“), perskaitykite puikią įvadinę vinjetę. Šio rašymo metu intro vinjetę buvo galima įsigyti R adresu vinjetė ("basic-use", package = "googlesheets"). Jei nematote, pabandykite pagalba (paketas = "googlesheets") ir spustelėkite nuorodą Vartotojo vadovai, paketų vinjetės ir kita dokumentacija, kad rastumėte galimas vinjetes, arba peržiūrėkite pakuotės informaciją „GitHub“ adresu //github.com/jennybc/googlesheets.

Nukreipkite duomenis iš tinklalapių su „rvest“ paketu ir „SelectorGadget“ naršyklės plėtiniu arba „JavaScript“ žymele. „SelectorGadget“ padeda atrasti CSS duomenų elementus, kuriuos norite nukopijuoti, esančius HTML puslapyje; tada rvest naudoja R, kad surastų ir išsaugotų tuos duomenis. Tai nėra technika pradedantiems pradedantiesiems, tačiau, įgiję šiek tiek „R“ patirties, galite grįžti ir dar kartą tai peržiūrėti. Turiu keletą instrukcijų ir vaizdo įrašą, kaip tai padaryti, adresu //bit.ly/Rscraping. „RStudio“ taip pat turi internetinį seminarą, kurį galima įsigyti pagal pareikalavimą.

R išsaugojimo ir skaitymo funkcijų pagrindo alternatyvos. Jei dirbate su dideliais duomenų rinkiniais, greitis jums gali tapti svarbus išsaugant ir įkeliant failus. „Data.table“ paketas yra greitas duona () funkciją, tačiau saugokitės, kad gauti objektai yra duomenys. lentelės, o ne paprasti duomenų rėmeliai; kai kurie elgesio būdai yra skirtingi. Jei norite įprasto duomenų rėmo, galite jį gauti naudodami as.data.frame (mydatable) sintaksė. „Data.table“ paketas rašyti () funkcija skirta rašyti į CSV failą žymiai greičiau nei baziniai R failai rašyti.csv ().

Dvi kitos pakuotės gali būti įdomios duomenims saugoti ir gauti. Plunksnų paketas išsaugo dvejetainį formatą, kurį galima nuskaityti į R arba Python. Pirmasis paketas skaityti.fst () ir write.fst () siūlome greitai išsaugoti ir įkelti R duomenų rėmelio objektus, taip pat failų glaudinimo galimybę.