Programiranje

R vadnica: Kako uvoziti podatke v R

Pridobite celotno knjigo
Praktični R za množično komuniciranje in novinarstvo MSRP 59,95 USD Oglejte si

Ta članek je bil z dovoljenjem založnika izvlečen iz knjige „Practical R for Mass Communication and Journalism“. © 2019 Taylor & Francis Group, LLC.

Preden lahko analizirate in vizualizirate podatke, jih morate spraviti v R. To lahko storite na različne načine, odvisno od tega, kako so vaši podatki formatirani in kje se nahajajo.

Običajno je funkcija, ki jo uporabljate za uvoz podatkov, odvisna od oblike datoteke. V osnovno R lahko na primer uvozite datoteko CSV z read.csv (). Hadley Wickham je ustvaril paket z imenom readxl, ki ima, kot ste pričakovali, funkcijo za branje v Excelovih datotekah. Obstaja še en paket, googlesheets, za vnašanje podatkov iz Googlovih preglednic.

Ampak, če se nočete vsega tega spomniti, obstaja rio.

Čarovnija Ria

"Cilj rio je s pomočjo treh preprostih funkcij v slogu švicarskega noža olajšati I / O [uvoz / izhod] v R-ju s pomočjo preprostih funkcij", piše na strani GitHub projekta. Te funkcije so uvoz (), izvoz (), in Pretvorba().

Torej, paket rio ima samo eno funkcijo za branje v različnih vrstah datotek: uvoz (). Če ti uvoz ("myfile.csv"), uporablja funkcijo za branje datoteke CSV. uvoz ("myspreadsheet.xlsx") deluje enako. Dejansko rio obravnava več kot dva ducata formatov, vključno s podatki, ločenimi z zavihki (s pripono .tsv), JSON, Stata in podatki formata s fiksno širino (.fwf).

Paketi, potrebni za to vadnico

  • rio
  • htmltab
  • readxl
  • googlesheets
  • pacman
  • hišnik
  • rmiscutils (pm GitHub) ali readr
  • tibble

Ko želite analizirati podatke, če želite rezultate shraniti v obliki CSV, preglednico Excel ali druge oblike, rio's izvoz () funkcija lahko to reši.

Če v sistemu še nimate paketa rio, ga namestite zdaj z install.packages ("rio").

Nekaj ​​vzorčnih podatkov sem nastavil z bostonskimi podatki o zimskih snežnih padavinah. Lahko se odpravite na //bit.ly/BostonSnowfallCSV in z desno miškino tipko kliknete, da datoteko shranite kot BostonWinterSnowfalls.csv v trenutnem delovnem imeniku projekta R. Toda ena od točk skriptiranja je zamenjati ročno delo - dolgočasno ali kako drugače - z avtomatizacijo, ki jo je enostavno reproducirati. Namesto da kliknete za prenos, lahko uporabite R-je download.file funkcija s sintakso download.file ("url", "destinationFileName.csv"):

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

To predpostavlja, da bo vaš sistem preusmeril iz te bližnjice Bit.ly URL in uspešno našel pravi URL datoteke //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv Občasno sem imel težave z dostopom do spletne vsebine na starih računalnikih z operacijskim sistemom Windows. Če imate enega od teh in ta povezava Bit.ly ne deluje, lahko dejanski URL zamenjate za povezavo Bit.ly. Druga možnost je, če je mogoče, nadgradite računalnik z operacijskim sistemom Windows na Windows 10, da preverite, ali je to v redu.

Če želite, da bi lahko rio samo uvozil podatke neposredno iz URL-ja, dejansko lahko, in do tega bom prišel v naslednjem razdelku. Bistvo to V tem poglavju je opisano, kako vaditi delo z lokalno datoteko

Ko imate testno datoteko v lokalnem sistemu, lahko te podatke naložite v objekt R, imenovan snowdata, s kodo:

snowdata <- rio :: import ("BostonWinterSnowfalls.csv")

Upoštevajte, da bo možno, da vas bo rio pozval, da datoteko znova naložite v binarni obliki, v tem primeru boste morali zagnati

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

Ne pozabite uporabiti možnosti za dokončanje zavihka RStudio. Če tipkate rio :: in počakajte, dobili boste seznam vseh razpoložljivih funkcij. Tip sneg počakajte in kot možnost bi morali videti polno ime predmeta. S smernimi tipkami gor in dol se premikate med predlogi za samodejno dokončanje. Ko je označena želena možnost, pritisnite tipko Tab (ali Enter), da v skript dodate celotno ime predmeta ali funkcije.

Morali bi videti predmet snežni podatki v zgornjem desnem podoknu RStudio. (Če je v zgornjem desnem podoknu namesto okolja prikazana vaša zgodovina ukazov, izberite zavihek Okolje.)

Skupina Taylor & Francis

snežni podatki mora pokazati, da ima 76 "obs." - opazovanja ali vrstice in dve spremenljivki ali stolpci. Če kliknete puščico levo od snežni podatki če želite razširiti seznam, boste videli dve imeni stolpcev in vrsto podatkov, ki jih vsebuje vsak stolpec. The Zima je niz znakov in Skupaj stolpec je številčen. V podoknu Okolje bi morali videti tudi prvih nekaj vrednosti vsakega stolpca.

Skupina Taylor & Francis

Kliknite besedo snežni podatki na zavihku Okolje za bolj pregleden pogled vaših podatkov. Ta isti pogled lahko dobite s konzole R z ukazom Pogled (snežni podatki) (to mora biti veliko V v pogledu -pogled ne bo delovalo). Opomba: snežni podatki ni v narekovajih, ker se sklicujete na ime R objekt v vašem okolju. V rio :: import ukaz pred, BostonWinterSnowfalls.csv je v narekovajih, ker to ni objekt R; gre za ime niza znakov datoteke zunaj R.

Skupina Taylor & Francis

Ta pogled ima nekaj vedenj, podobnih preglednicam. Kliknite glavo stolpca, da jo razvrstite po vrednostih stolpca v naraščajočem vrstnem redu; kliknite isti naslov stolpca drugič, da razvrstite po padajočem vrstnem redu. V iskalnem polju najdete vrstice, ki se ujemajo z določenimi znaki.

Če kliknete ikono Filter, dobite filter za vsak stolpec. The Zima stolpec znakov deluje, kot bi lahko pričakovali, filtriranje za vse vrstice, ki vsebujejo vnesene znake. Če kliknete Skupaj številski stolpec filter, vendar starejše različice RStudio prikažejo drsnik, novejše pa histogram in polje za filtriranje.

Uvozite datoteko iz spleta

Če želite datoteko prenesti in uvoziti iz spleta, lahko to storite, če je javno dostopna in v obliki, kot je Excel ali CSV. Poskusi

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

Veliko sistemov lahko sledi URL-ju za preusmeritev v datoteko tudi po tem, ko vam najprej prikaže sporočilo o napaki, če določite obliko kot "csv" ker ime datoteke tukaj ne vključuje .csv. Če vaš ne bo deloval, raje uporabite URL //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv.

rio lahko s spletnih strani uvozi tudi dobro oblikovane tabele HTML, vendar tabele morajo biti zelo dobro oblikovan. Recimo, da želite prenesti tabelo, ki opisuje ocene resnosti snežne nevihte pri Nacionalni vremenski službi. Na strani Nacionalnih centrov za okoljske informacije o indeksu snežnih padavin je samo ena tabela, zelo dobro izdelana, zato bi takšna koda morala delovati:

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

Še enkrat upoštevajte, da morate v tem primeru vključiti obliko format = "html" . ker sam URL ne nakazuje, za katero datoteko gre. Če je URL vseboval ime datoteke z .html podaljšanje, rio bi vedel.

V resničnem življenju pa se spletni podatki redko pojavljajo v tako urejeni, izolirani obliki. Dobra možnost za primere, ki niso tako dobro izdelani, je pogosto paket htmltab. Namestite ga z install.packages ("htmltab"). Funkcija paketa za branje tabele HTML se imenuje tudi htmltab. Če pa zaženete to:

knjižnica (htmltab) citytable <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (citytable)

vidite, da nimate pravilne tabele, ker podatkovni okvir vsebuje en objekt. Ker nisem določil ki tabela, je potegnila prvo tabelo HTML na strani. To slučajno ni bila tista, ki si jo želim. Ne želim uvoziti vseh tabel na strani, dokler ne najdem prave, toda na srečo imam razširitev za Chrome z imenom Table Capture, ki mi omogoča ogled seznama tabel na strani.

Zadnjič, ko sem preveril, sem tabelo 5 z več kot 300 vrsticami želel. Če vam to zdaj ne uspe, poskusite namestiti Table Capture v brskalnik Chrome, da preverite, katero tabelo želite prenesti.

Poskusil bom znova, navedel tabelo 5 in nato videl, katera imena stolpcev so v novi tabeli mest. Upoštevajte, da sem v naslednjo kodo postavil citytable <- htmltab () ukaz na več vrstic. To pomeni, da ni tekel čez robove - vse lahko obdržite v eni vrstici. Če se je številka tabele spremenila od objave tega članka, jo zamenjajte ki = 5 s pravilno številko.

Namesto da uporabite stran v Wikipediji, lahko URL Wikipedije zamenjate z URL-jem kopije datoteke, ki sem jo ustvaril. Ta datoteka je na //bit.ly/WikiCityList. Če želite uporabiti to različico, vnesite bit.ly/WikiCityList v brskalnik, nato pa kopirajte dolg URL, na katerega ga preusmeri in uporabi to namesto URL-ja Wikipedije v spodnji kodi:

knjižnica (htmltab) citytable <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population", which = 5) kolmena (citytable)

Kako sem vedel ki je bil argument, ki sem ga potreboval za določitev številke tabele? Prebral sem htmltab z ukazom ? htmltab. To je vključevalo vse razpoložljive argumente. Pregledala sem možnosti in "ki vektor dolžine ena za identifikacijo tabele v dokumentu «je pogledal desno.

Upoštevajte tudi, da sem uporabil colnames (citytable) namesto imena (citytable) da vidite imena stolpcev. Vsako bo delovalo. Base R ima tudiimena vrstic () funkcijo.

Kakor koli že, ti rezultati v tabeli so veliko boljši, čeprav se iz teka vidi str (citytable) da je nekaj stolpcev, ki bi morali biti številke, vnesenih kot nizov znakov. To lahko vidite tako pri chr zraven imena stolpca in narekovajev okrog vrednosti kot 8,550,405.

To je ena od manjših sitnosti R-ja: R tega na splošno ne razume 8,550 je številka. S to težavo sem se spoprijel sam, tako da sem v svoj paket rmiscutils zapisal lastno funkcijo, s katero sem vse tiste "znakovne nize", ki so v resnici številke z vejicami, spremenil nazaj v številke. Vsak lahko paket prenese iz GitHub-a in ga uporabi.

Najbolj priljubljen način namestitve paketov iz GitHub je uporaba paketa, imenovanega devtools. devtools je izjemno zmogljiv paket, namenjen predvsem ljudem, ki želijo napisati svoje lastno paketov in vključuje nekaj načinov namestitve paketov iz drugih krajev poleg CRAN-a. Vendar pa devtools običajno zahteva nekaj dodatnih korakov za namestitev v primerjavi s tipičnim paketom in nadležne naloge sistemskega skrbnika želim zapustiti, dokler niso nujno potrebne.

Paket pacman pa tudi namesti pakete iz virov, ki niso CRAN, kot je GitHub. Če še niste, namestite pacman z install.packages ("pacman").

pacman's p_install_gh ("uporabniško ime / packagerepo") funkcija se namesti iz repoja GitHub.

p_load_gh ("uporabniško ime / packagerepo")obremenitve paket v pomnilnik, če že obstaja v vašem sistemu, in najprej namesti, nato pa naloži paket iz GitHub, če paket lokalno ne obstaja.

Moj paket pripomočkov rmisc najdete na smach / rmiscutils. Teči pacman :: p_load_gh ("smach / rmiscutils") namestiti svoj paket rmiscutils.

Opomba: Alternativni paket za namestitev paketov iz GitHub-a se imenuje daljinski upravljalnik, ki ga lahko namestite prekinstall.packages ("oddaljeni"). Njegov glavni namen je namestiti pakete iz oddaljenih skladišč, kot je GitHub. Datoteko s pomočjo si lahko ogledate z pomoč (paket = "oddaljeni").

In verjetno najbolj umazan paket je githubinstall. Njegov cilj je uganiti repo, kjer je paket. Namestite ga prekinstall.packages ("githubinstall"); potem lahko s pomočjo namestite moj paket rmiscutilsgithubinstall :: gh_install_packages ("rmiscutils"). Vprašani boste, ali želite paket namestiti na smach / rmisutils (ti delaš).

Zdaj, ko ste namestili mojo zbirko funkcij, lahko uporabite mojo število_z_komami () funkcija za spremembo tistih nizov znakov, ki bi morali biti številke, v številke. Močno priporočam, da v podatkovni okvir dodate nov stolpec, namesto da spremenite obstoječega - to je dobra praksa analize podatkov, ne glede na to, katero platformo uporabljate.

V tem primeru bom poklical nov stolpec PopEst2017. (Če je bila tabela od takrat posodobljena, uporabite ustrezna imena stolpcev.)

knjižnica (rmiscutils) citytable $ PopEst2017 <- number_with_commas (citytable $ `2017 ocena`)

Mimogrede, moj paket rmiscutils ni edini način za obravnavo uvoženih številk z vejicami. Ko sem ustvaril svoj paket rmiscutils in njegov število_z_komami () funkcija, se je rodil paket tidyverse readr. readr vključuje tudi funkcijo, ki pretvori nize znakov v številke, parse_number ().

Po namestitvi readrja lahko z readrjem ustvarite številke iz stolpca ocene za leto 2017:

citytable $ PopEst2017 <- readr :: parse_number (citytable $ `ocena 2017)

Ena prednost readr :: parse_number () je, da lahko določite svojega jezik () za nadzor nad stvarmi, kot so kodiranje in decimalna mesta, ki bi lahko zanimale bralce, ki nimajo sedeža v ZDA. Teči ? parse_number za več informacij.

Opomba: če niste uporabili dokončanja zavihka za ocenjevalni stolpec za leto 2017, ste morda imeli težave z imenom tega stolpca, če je v njem med presledkom med izvajanjem te kode. V moji zgornji kodi so opaženi enojni narekovaji nazaj (`) okoli imena stolpca. To pa zato, ker je imelo obstoječe ime presledek, ki ga ne bi smeli imeti v R. To ime stolpca ima še eno težavo: začne se s številko, prav tako praviloma R ne-št. RStudio to ve in samodejno doda potrebne povratne narekovaje okoli imena s samodejnim dokončanjem zavihka.

Bonus nasvet: Obstaja paket R (seveda obstaja!), Imenovan hišnik, ki lahko samodejno popravi težavna imena stolpcev, uvožena iz neprimernega vira podatkov. Namestite ga z install.packages ("hišnik"). Nato lahko ustvarite nova čista imena stolpcev s hišniškimi imeni clean_names () funkcijo.

Zdaj bom ustvaril povsem nov podatkovni okvir, namesto da bi spreminjal imena stolpcev v svojem prvotnem podatkovnem okviru, in na izvirnih podatkih zagnal podpornikova clean_names (). Nato imena stolpcev podatkovnega okvira preverite z imena ():

citytable_cleaned <- hišnik :: clean_names (citytable)

imena (citytable_cleaned)

Vidite, da so bili presledki spremenjeni v podčrtaje, ki so v imenih spremenljivk R pravna (kot tudi pike). Vsa imena stolpcev, ki so se začela s številko, imajo zdaj x na začetku.

Če ne želite zapravljati pomnilnika z dvema kopijama v bistvu enakih podatkov, lahko objekt R odstranite iz delovne seje zrm () funkcija: rm (citytable).

Uvozite podatke iz paketov

Obstaja več paketov, ki vam omogočajo dostop do podatkov neposredno iz R. Ena je quantmod, ki vam omogoča, da nekatere ameriške vladne in finančne podatke povlečete neposredno v R.

Drugi je primerno imenovan paket vremenskih podatkov na CRAN. Podatke lahko povleče iz API-ja Weather Underground, ki vsebuje informacije za številne države po svetu.

Paket rnoaa, projekt skupine rOpenSci, vključuje več različnih naborov podatkov ameriške Nacionalne uprave za oceane in atmosfero, vključno z dnevnimi informacijami o podnebju, boje in nevihtah.

Če vas zanimajo podatki države ali lokalne vlade v ZDA ali Kanadi, boste morda želeli preveriti RSocrata in preveriti, ali agencija, ki vas zanima, objavlja podatke tam. Še nisem našel celotnega seznama vseh razpoložljivih naborov podatkov Socrata, vendar je na naslovu //www.opendatanetwork.com iskalna stran. Vendar bodite previdni: obstajajo nabori, ki jih naloži skupnost, skupaj z uradnimi vladnimi podatki, zato preverite lastnika nabora podatkov in vir nalaganja, preden se nanj zanesete več kot R. Rezultat »nabora podatkov ODN« pomeni, da gre za datoteko, ki jo je naložil nekdo iz splošne javnosti. Uradni nabori podatkov vlade običajno živijo na URL-jih, kot so //data.CityOrStateName.gov in//data.CityOrStateName.us.

Za več paketov za uvoz podatkov si oglejte mojo iskalno tabelo na //bit.ly/RDataPkgs. Če delate s podatki ameriške vlade, vas bodo morda še posebej zanimali cenzusapi in tidycensus, ki se oba dotakneta podatkov ameriškega urada za popis. Drugi koristni vladni svežnji podatkov vključujejo eu.us.opendata vlad ZDA in Evropske unije, da bi olajšali primerjavo podatkov v obeh regijah, in Cancensus za kanadske popisne podatke.

Ko podatki niso najbolje oblikovani

V vseh teh primerih vzorčnih podatkov podatki niso bili le dobro oblikovani, ampak idealni: ko sem jih našel, so bili popolnoma strukturirani za R. Kaj s tem mislim? Bila je pravokotna, pri čemer je imela vsaka celica eno vrednost namesto združenih celic. In prva vrstica je imela glave stolpcev, v nasprotju z recimo naslovno vrstico z veliko pisavo v več celicah, da je bila videti lepa - ali pa sploh ni bilo stolpcev.

Obravnavanje neurejenih podatkov se lahko na žalost precej zaplete. Obstaja pa nekaj pogostih težav, ki jih je enostavno odpraviti.

Začetne vrstice, ki niso del podatkov. Če veste, da prvih nekaj vrstic preglednice Excel nima želenih podatkov, lahko naročite podjetju Rio, da preskoči eno ali več vrstic. Sintaksa je rio :: import ("mySpreadsheet.xlsx", preskoči = 3) da izključite prve tri vrstice. preskoči vzame celo število.

V preglednici ni imen stolpcev. Privzeti uvoz predvideva, da je prva vrstica vašega lista imena stolpcev. Če vaši podatki ne imajo glave, se lahko prva vrstica podatkov konča kot glave stolpcev. Da bi se temu izognili, uporabite rio :: import ("mySpreadsheet.xlsx", col_names = FALSE) tako bo R ustvaril privzete glave X0, X1, X2 itd. Ali pa uporabite sintakso, kot je rio :: import ("mySpreadsheet.xlsx", col_names = c ("Mesto", "Država", "Prebivalstvo")) da nastavite lastna imena stolpcev.

Če je v vaši preglednici več zavihkov, se ki argument preglasi privzeto branje na prvem delovnem listu. rio :: import ("mySpreadsheet.xlsx", ki = 2) se glasi v drugem delovnem listu.

Kaj je podatkovni okvir? In kaj lahko storite z enim?

rio uvozi preglednico ali datoteko CSV kot R podatkovni okvir. Kako veste, ali imate podatkovni okvir? V primeru snežni podatki, razred (snežni podatki) vrne razred ali tip predmeta, ki je. str (snežni podatki) vam pove tudi razred in doda malo več informacij. Veliko informacij, ki jih vidite str () je podobno tistemu, ki ste ga videli za ta primer v podoknu okolja RStudio: snežni podatki ima 76 opazovanj (vrstice) in dve spremenljivki (stolpci).

Podatkovni okviri so nekoliko podobni preglednicam, saj imajo stolpce in vrstice. Vendar so podatkovni okviri bolj strukturirani. Vsak stolpec v podatkovnem okviru je R vektor, kar pomeni, da vsak element v stolpcu mora biti istega podatkovnega tipa. En stolpec je lahko vse številke, drugi stolpec pa lahko vsi nizi, vendar morajo biti podatki znotraj stolpca dosledni.

Če imate stolpec podatkovnega okvira z vrednostmi 5, 7, 4 in vrednostjo, ki prihaja, R ne bo preprosto nesrečen in vam bo dal napako. Namesto tega bo prisilil vse vaše vrednosti, da bodo enake vrste podatkov. Ker "vrednosti, ki prihaja" ni mogoče spremeniti v število, bodo 5, 7 in 4 na koncu spremenjeni v nize znakov "5", "7", in "4". Običajno to ni tisto, kar želite, zato je pomembno, da se zavedate, kateri tip podatkov je v posameznem stolpcu. Vrednost niza znakov v stolpcu s 1.000 številkami lahko celotno stvar spremeni v znake. Če želite številke, se prepričajte, da jih imate!

R ima načine sklicevanja na manjkajoče podatke, ki ne bodo zamočili preostalih stolpcev: NA pomeni "ni na voljo."

Podatkovni okviri so pravokotni: Vsaka vrstica mora imeti enako število vnosov (čeprav so nekateri lahko prazni), vsak stolpec pa mora imeti enako število elementov.

Na stolpce preglednic Excel se običajno nanašajo črke: Stolpec A, Stolpec B itd. Na stolpec podatkovnega okvira se lahko sklicujete z njegovim imenom z uporabo sintakse dataFrameName $ columnName. Torej, če tipkate snowdata $ Skupaj in pritisnite Enter, vse vrednosti se prikažejo v Skupaj stolpcu, kot je prikazano na spodnji sliki. (Zato, ko zaženete str (snežni podatki) ukaz, pred imenom vsakega stolpca je znak za dolar.)

Skupina Taylor & Francis

Opomnik, da te oklepaje na levi strani seznama niso del podatkov; ti samo povedo, s katerim položajem se začne vsaka vrstica podatkov. [1] pomeni, da se vrstica začne s prvim elementom v vektorju, [10] deseti itd.

Dokončanje zavihka RStudio deluje tako z imeni stolpcev podatkovnega okvira kot tudi imeni objektov in funkcij. To je zelo koristno, da ne boste napačno črkovali imena stolpca in zlomili skripta - poleg tega pa prihrani tipkanje, če imate dolga imena stolpcev.

Tip snowdata $ in počakajte, potem boste videli seznam vseh imen stolpcev v snežnih podatkih.

V podatkovni okvir je enostavno dodati stolpec. Trenutno je Skupaj stolpec prikazuje zimsko sneženje v palcih. Če želite dodati stolpec, ki prikazuje vsote v metrih, lahko uporabite to obliko:

snowdata $ metrov <- snowdata $ skupaj * 0,0254

Na levi je ime novega stolpca, na desni pa formula. V Excelu ste morda že uporabljali = A2 * 0,0254 in nato kopiral formulo v stolpec. S skriptom vam ni treba skrbeti, ali ste formulo pravilno uporabili za vse vrednosti v stolpcu.

Zdaj pa poglejte svojega snežni podatki na zavihku Okolje. Moral bi imeti tretjo spremenljivko, Merilniki.

Ker snežni podatki je podatkovni okvir, ima določene lastnosti podatkovnega okvira, do katerih lahko dostopate iz ukazne vrstice. nrow (snežni podatki) vam daje številke vrstic in ncol (snežni podatki) število stolpcev. Da, to si lahko ogledate v okolju RStudio, da vidite, koliko opazovanj in spremenljivk je, vendar bodo verjetno časi, ko boste to želeli vedeti kot del skripta. colnames (snowdata) ali imena (snežni podatki) vam daje ime snežni podatki stolpci. imena vrstic (snežni podatki) vam da katero koli ime vrstic (če nobeno ni nastavljeno, bo privzeto za nize znakov številke vrstice, kot je "1", "2", "3", itd.).

Nekatere od teh posebnih funkcij podatkovnega okvira, znane tudi kot metode, ne samo da vam daje informacije, ampak vam omogoča tudi spreminjanje značilnosti podatkovnega okvira. Torej, imena (snežni podatki) vam pove imena stolpcev v podatkovnem okviru, vendar

imena (podatki o snegu) <- c ("Winter", "SnowInches", "SnowMeters")

spremembe imena stolpcev v podatkovnem okviru.

Verjetno vam za objekt podatkovnega okvira ne bo treba poznati vseh razpoložljivih metod, če pa ste radovedni, metode (razred = razred (snežni podatki)) jih prikaže. Če želite izvedeti več o kateri koli metodi, zaženite običajno poizvedbo za pomoč z vprašajem, na primer združiti ali ? podnabor.

Ko številka v resnici ni številka

Poštne številke so dober primer "številk", ki jih v resnici ne bi smeli obravnavati kot take. Čeprav je tehnično številčno, ni smiselno delati stvari, na primer dodati dve poštni številki skupaj ali vzeti povprečje poštnih številk v skupnosti. Če uvozite stolpec z poštno kodo, ga bo R verjetno spremenil v stolpec s številkami. In če imate opravka z območji v Novi Angliji, kjer se poštne številke začnejo z 0, 0 izgine.

Datoteko bostonskih poštnih številk po soseskah imam na zavihku, preneseno iz vladne agencije Massachusettsa na //raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt. Če bi ga poskušal uvoziti z stiskalnice <- rio :: import ("bostonzips.txt"), poštne številke bi bile 2118, 2119 itd., ne pa 02118, 02119 itd.

Tu pomaga malo vedeti o osnovni funkciji, ki jo ima rio uvoz () funkcija uporablja. Te osnovne funkcije najdete tako, da preberete uvoz datoteka za pomoč na ? uvoz. Za vlečenje datotek, ločenih z zavihki, uvoz uporablja bodisi fread () iz paketa data.table ali osnovnega R-ja read.table () funkcijo. The ? beri.tabela help pravi, da lahko s stolpcem določite razrede stolpcev colClasses prepir.

Ustvarite podatkovni podimenik v trenutnem imeniku projekta, nato z njim prenesite datoteko bostonzips.txt

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

Če uvozite to datoteko z navedbo obeh stolpcev kot nizov znakov, bodo poštne številke pravilno oblikovane:

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

Upoštevajte, da je treba razrede stolpcev nastaviti z uporabo c () funkcija, c ("znak", "znak"). Če ste poskusili colClasses, "znak", bi dobili sporočilo o napaki. To je tipična napaka za začetnike R, vendar ne bi smelo trajati dolgo, da bi vstopili v c () navada.

Nasvet za varčevanje s tipkanjem: pisanje c ("znak", "znak") ni vse tako naporno; če pa imate preglednico s 16 stolpci, kjer morajo biti prvih 14 nizi znakov, je to lahko moteče. R-ji rep () funkcija lahko pomaga. rep (), kot ste že slutili, ponovi kateri koli element, ki mu ga daste, ne glede na to, kolikokrat ga naročite, z uporabo oblike rep (myitem, število). rep ("znak", 2) je enako kot c ("znak", "znak"), torej colClasses = rep ("znak", 2) je enakovredno colClasses = c ("znak", "znak") . In, colClasses = c (rep ("znak", 14), rep ("številski", 2)) nastavi prvih 14 stolpcev kot nize znakov, zadnja dva pa kot števila. Vsa imena razredov stolpcev morajo biti v narekovajih, ker so imena nizov znakov.

Predlagam, da se malo poigrate z rep () tako da se navadiš na obliko, saj gre za skladnjo, ki jo uporabljajo tudi druge funkcije R.

Preprosti vzorčni podatki

R ima nekaj vgrajenih naborov podatkov, ki so enostavni za uporabo, če se želite poigrati z novimi funkcijami ali drugimi tehnikami programiranja. Veliko jih uporabljajo tudi ljudje, ki poučujejo R, saj so inštruktorji lahko prepričani, da vsi študentje začnejo z enakimi podatki v popolnoma enaki obliki.

Tip podatki () da si ogledate razpoložljive vgrajene nabore podatkov v osnovnem R in nameščene pakete, ki so trenutno naloženi podatki (paket = .paketi (vsi.na voljo = TRUE)) from base R prikaže vse možne nabore podatkov iz paketov, ki so nameščeni v vašem sistemu, ne glede na to, ali so v trenutni delovni seji naloženi v pomnilnik ali ne.

Več informacij o naboru podatkov lahko dobite na enak način kot pomoč pri funkcijah: ? ime nabora podatkov ali pomoč ("ime nabora podatkov"). mtcars in iris sta med tistimi, ki sem jih pogosto uporabljala.

Če tipkate mtcars, se celoten nabor podatkov mtcars natisne v vaši konzoli. Lahko uporabite glava () funkcijo, s katero si oglejte prvih nekaj vrstic glava (mtcars).

Ta nabor podatkov lahko shranite v drugo spremenljivko, če želite, v obliki, kot je cardata <- mtcars.

Ali pa zagon podatkovne funkcije z imenom nabora podatkov, kot je podatki (mtcars), naloži nabor podatkov v vaše delovno okolje.

Eden najzanimivejših paketov z vzorčnimi nabori podatkov za novinarje je paket fivethirtyeight, ki vsebuje podatke iz zgodb, objavljenih na spletnem mestu FiveThirtyEight.com. Paket je ustvarilo več akademikov v posvetovanju z uredniki FiveThirtyEight; zasnovan je kot vir za poučevanje dodiplomske statistike.

Predpakirani podatki so lahko koristni - in v nekaterih primerih zabavni. V resničnem svetu pa morda ne uporabljate podatkov, ki so tako priročno zapakirani.

Ustvarite podatkovni okvir ročno v R

Verjetno boste pogosto imeli opravka s podatki, ki se začnejo zunaj R in jih uvozite iz preglednice, datoteke CSV, API-ja ali drugega vira. Včasih pa boste morda želeli vnesti majhno količino podatkov neposredno v R ali kako drugače ročno ustvariti podatkovni okvir. Torej, na hitro si oglejmo, kako to deluje.

Podatkovni okviri R so privzeto sestavljeni stolpec za stolpcem in ne enega vrstici ob času. Če ste želeli sestaviti hiter podatkovni okvir rezultatov mestnih volitev, lahko ustvarite vektor imen kandidatov, drugega vektorja z njihovo strankarsko pripadnostjo in nato vektor njihovih skupnih glasov:

kandidati <- c ("Smith", "Jones", "Write-ins", "Blanks")

stranka <- c ("demokrat", "republikanec", "", "")

glasov <- c (15248, 16723, 230, 5234)

Ne pozabite, da v številkah ne uporabljate vejic, kot bi lahko storili v Excelu.

Če želite iz teh stolpcev ustvariti podatkovni okvir, uporabite data.frame () funkcijo in synatx data.frame (stolpec1, stolpec2, stolpec3).

moji rezultati <- data.frame (kandidati, stranka, glasovi)

Preverite njegovo strukturo z str ():

str (moji rezultati)

Medtem ko kandidati in stranka vektorji so liki, kandidati in stranka stolpci podatkovnega okvira so bili spremenjeni v razred R predmetov, imenovanih faktorji. Na tej točki je nekoliko preveč plevela, da bi se poglobili v to, kako se dejavniki razlikujejo od likov, razen da bi to rekli

  1. Dejavniki so lahko koristni, če želite izdelke naročiti na določen, neabecedni način za grafične in druge namene, kot je npr. Slabo je manj kot Pošteno je manj kot Dobro je manj kot Odlično.
  2. Dejavniki se lahko obnašajo drugače, kot bi včasih pričakovali. Priporočam, da se držite nizov znakov, razen če imate dober razlog, da posebej želite dejavnike.

Z ustvarjanjem podatkovnih okvirov lahko ohranite nize znakov nedotaknjene, tako da dodate argument stringsAsFactors = FALSE:

moji rezultati <- data.frame (kandidati, stranka, glasovi, stringsAsFactors = FALSE) str (moji rezultati)

Zdaj so vrednosti tiste, ki ste jih pričakovali.

Na še eno stvar, na katero vas moram opozoriti pri ustvarjanju podatkovnih okvirov na ta način: če je en stolpec krajši od drugega (-ih), bo R včasih ponovil podatke iz krajšega stolpca -ne glede na to, ali želite, da se to zgodi.

Recimo, da ste na primer ustvarili stolpce z volilnimi rezultati za kandidate in stranke, vendar ste vnesli le rezultate glasov za Smith in Jones, ne pa za vpise in praznine. Lahko pričakujete, da bo podatkovni okvir prikazal druga dva vnosa prazna, pa bi se motil. Preizkusite in si oglejte, tako da ustvarite nov vektor glasov s samo dvema številkama in s tem novim vektorjem glasov ustvarite nov podatkovni okvir:

glasov <- c (15248, 16723)

myresults2 <- data.frame (kandidati, stranka, glasovi)

str (moji rezultati2)

Tako je, R je ponovno uporabil prvi dve številki, kar je vsekakor ne kaj bi želeli. Če poskusite to s tremi številkami v vektorju glasov namesto z dvema ali štirimi, R vrne napako. To je zato, ker vsakega vnosa ni bilo mogoče reciklirati enako številokrat.

Če že razmišljate: »Zakaj ne morem ustvariti podatkovnih okvirov, ki ne spreminjajo nizov v dejavnike samodejno? In zakaj moram skrbeti, da bodo podatkovni okviri ponovno uporabili podatke enega stolpca, če pozabim izpolniti vse podatke? " Hadley Wickham je imel isto misel. Njegov paket tibble ustvarja razred R, imenovan tudi tibble, za katerega pravi, da je »sodoben pogled na podatkovne okvire. Ohranijo funkcije, ki so prestale preizkus časa, in opustijo funkcije, ki so bile nekoč priročne, zdaj pa so moteče. "

Če vas to privlači, namestite paket tibble, če ni v vašem sistemu, in poskusite ustvariti tibble z

myresults3 <- tibble :: tibble (kandidati, stranka, glasovi)

in dobili boste sporočilo o napaki, da mora biti stolpec z glasovi dolg 4 štiri ali en element (tibble () bo en element ponovil tolikokrat, kot je potrebno, vendar le za en element).

Vrnite stolpec z glasovi na štiri vnose, če želite ustvariti tiblico s temi podatki:

knjižnica (tibble)

glasov <- c (15248, 16723, 230, 5234)

myresults3 <- tibble (kandidati, stranka, glasovi)

str (moji rezultati3)

Izgleda podobno kot podatkovni okvir - pravzaprav to je podatkovni okvir, vendar z nekaterimi posebnimi vedenji, na primer tiskanjem. Upoštevajte tudi, da so stolpci kandidatov nizi znakov in ne dejavniki.

Če vam je to vedenje všeč, pojdite naprej in uporabite tibbles. Glede na to, kako ohlajeni običajni podatkovni okviri ostajajo v R, je še vedno pomembno vedeti o njihovem privzetem vedenju.

Izvažanje podatkov

Pogosto po tem, ko svoje podatke zmešate v R, želite shraniti rezultate. Tu je nekaj načinov za izvoz vaših podatkov, ki jih najpogosteje uporabljam:

Shrani v datoteko CSV s rio :: export (myObjectName, datoteka = "myFileName.csv") in v datoteko Excel z rio :: export (myObjectName, datoteka = "myFileName.xlsx"). rio na podlagi razširitve imena datoteke razume, katero obliko datoteke želite. Obstaja več drugih oblik, vključno z .tsv za podatke, ločene z zavihki, .json za JSON in .xml za XML.

Shrani v binarni objekt R to olajša ponovno nalaganje v R v prihodnjih sejah. Obstajata dve možnosti.

Splošno shrani () shrani enega ali več predmetov v datoteko, na primer shrani (objectName1, objectName2, file = "myfilename.RData"). Če želite te podatke prebrati nazaj v R, uporabite ukaz load ("myfilename.RData") in vsi predmeti se vrnejo z enakimi imeni v enakem stanju, kot so bili prej.

Posamezen predmet lahko shranite tudi v datoteko z saveRDS (myobject, file = "filename.rds"). Logična predpostavka je, da bi loadRDS datoteko prebral nazaj, namesto tega pa je ukaz readRDS- in v tem primeru so bili shranjeni samo podatki, ne ime predmeta. Torej morate podatke prebrati v novo ime predmeta, na primer mydata <- readRDS ("filename.rds").

Obstaja tretji način shranjevanja predmeta R posebej za R: generiranje ukazov R, ki bi objekt ustvarili namesto predmeta s končnimi rezultati. Osnovne funkcije R za ustvarjanje datoteke R za ponovno ustvarjanje predmeta so dput () ali dump (). Vendar ugotovim rio :: export (myobject, "mysavedfile.R") še lažje zapomniti.

Nazadnje obstajajo dodatni načini za shranjevanje datotek, ki optimizirajo za berljivost, hitrost ali stiskanje, ki jih omenjam v razdelku z dodatnimi viri na koncu tega članka.

Predmet R lahko izvozite tudi v odložišče za Windows ali Mac z rio: rio :: export (myObjectName, format). Podatke lahko iz odložišča uvozite v R na enak način: rio :: import (datoteka).

Bonus: rio's Pretvorba() funkcija vam omogoča - uganili ste - pretvorbo ene vrste datoteke v drugo, ne da bi vam bilo treba ročno vleči podatke v in nato iz R. Glejte ?Pretvorba za več informacij.

Končna točka: RStudio vam omogoča, da kliknete za uvoz datoteke, ne da bi vam bilo treba sploh pisati kodo. Tega ne priporočam, dokler vam ni prijetno uvoziti iz ukazne vrstice, ker se mi zdi pomembno razumeti kodo uvoza. Ampak, priznam, da je to lahko priročna bližnjica.

Na zavihku Datoteke v spodnjem desnem podoknu RStudio se pomaknite do datoteke, ki jo želite uvoziti, in jo kliknite. Videli boste možnost Ogled datoteke ali Uvoz nabora podatkov. Izberite Uvozi nabor podatkov, če si želite ogledati pogovorno okno, ki predogleda podatke, omogoča spreminjanje načina uvoza podatkov in predogled kode, ki bo ustvarjena.

Naredite vse spremembe, ki jih želite, in kliknite Uvozi in vaši podatki bodo vneseni v R.

Dodatni viri

rio alternative. Medtem ko je rio odličen švicarski vojaški nož za obdelavo datotek, lahko včasih želite malo več nadzora nad tem, kako se vaši podatki potegnejo ali shranijo iz R. Poleg tega so bili časi, ko sem imel izziv podatkovna datoteka, s katero se je rio zadušil, vendar jo je lahko obvladal drug paket. Nekatere druge funkcije in paketi, ki jih boste morda želeli raziskati:

  • Osnova R read.csv () in read.table () za uvoz besedilnih datotek (uporabite ? read.csv in ? beri.tabela da dobite več informacij). stringsAsFactors = FALSE je s temi potreben, če želite, da znakovni nizi ostanejo kot znakovni nizi. write.csv () shrani v CSV.
  • rio za branje datotek Excel uporablja paket readxl Hadley Wickham. Druga možnost za Excel je openxlsx, ki lahko piše v Excel datoteko in jo tudi bere. Za informacije o formatiranju preglednic med izvozom poglejte vinjete paketa openxlsx.
  • Wickhamov bralni paket je vreden ogleda tudi v okviru "urejenosti". readr vključuje funkcije za branje CSV, ločenih zavihkov, fiksne širine, spletnih dnevnikov in več drugih vrst datotek. readr izpiše vrsto podatkov, ki jo je določil za vsak stolpec - celo število, znak, dvojno (necela števila) itd. Ustvari tiblice.

Uvozite neposredno iz Googlove preglednice. Paket googlesheets omogoča uvoz podatkov iz preglednice Google Preglednic, tudi če je zasebna, s preverjanjem pristnosti Google Računa. Paket je na voljo na CRAN; namestite prekoinstall.packages ("googlesheets"). Po nalaganju z knjižnica ("googlesheets"), preberite odlično uvodno vinjeto. V času pisanja tega članka je bila uvodna vinjeta na voljo v R na vinjeta ("osnovna uporaba", paket = "googlesheets"). Če je ne vidite, poskusite pomoč (paket = "googlesheets") in kliknite povezavo Uporabniški vodniki, Vinjete za pakete in Druga dokumentacija za razpoložljive vinjete ali si oglejte informacije o paketu na GitHubu na //github.com/jennybc/googlesheets.

Odstranite podatke s spletnih strani s paketom rvest in razširitvijo brskalnika SelectorGadget ali zaznamkom JavaScript. SelectorGadget vam pomaga odkriti elemente CSS podatkov, ki jih želite kopirati in so na strani HTML; potem rvest uporablja R za iskanje in shranjevanje teh podatkov. To ni tehnika za surove začetnike, toda ko imate nekaj R izkušenj, se boste morda želeli vrniti in to ponovno preučiti. Nekaj ​​navodil in video o tem, kako to narediti, imam na //bit.ly/Rscraping. RStudio ima tudi spletni seminar na voljo na zahtevo.

Nadomestne funkcije za shranjevanje in branje R-ja. Če delate z velikimi nabori podatkov, vam lahko hitrost postane pomembna pri shranjevanju in nalaganju datotek. Paket data.table je hiter fread () funkcija, vendar pazite, da so nastali predmeti data.tables in ne navadni podatkovni okviri; nekatera vedenja so drugačna. Če želite običajni podatkovni okvir, ga lahko dobite z as.data.frame (mydatatable) skladnja. Paket data.table fwrite () funkcija je namenjena zapisovanju v datoteko CSV bistveno hitreje kot osnovni R-ji write.csv ().

Za shranjevanje in pridobivanje podatkov bi lahko bila zanimiva še dva druga paketa. Paket perja shrani v binarni obliki, ki jo je mogoče prebrati v R ali Python. In prvi paket read.fst () in write.fst () ponujajo hitro shranjevanje in nalaganje predmetov R podatkovnega okvira - plus možnost stiskanja datotek.

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