Ohjelmointi

R-opetusohjelma: Kuinka tuoda tietoja R-tiedostoon

Hanki koko kirja
Käytännön R joukkoviestinnälle ja journalismille MSRP 59,95 dollaria Katso se

Tämä artikkeli otettiin julkaisusta "Practical R for Mass Communication and Journalism". © 2019 Taylor & Francis Group, LLC.

Ennen kuin voit analysoida ja visualisoida tietoja, sinun on saatettava ne R: ään. Voit tehdä tämän eri tavoin, riippuen siitä, miten tietosi muotoillaan ja missä ne sijaitsevat.

Yleensä tietojen tuomiseen käytetty toiminto riippuu tietojen tiedostomuodosta. Esimerkiksi Base R: ssä voit tuoda CSV-tiedoston read.csv (). Hadley Wickham loi paketin nimeltä readxl, jolla on odotettavissa oleva tehtävä lukea Excel-tiedostoissa. Google-laskentataulukoiden tietojen hakemiseksi on toinen paketti, googlesheets.

Mutta jos et halua muistaa kaikkea sitä, siellä on rio.

Rio taika

"Rion tavoitteena on tehdä R-tiedostotiedostoista I / O [tuonti / lähtö] mahdollisimman helpoksi toteuttamalla kolme yksinkertaista toimintoa Sveitsin armeijan veitsityyliin", projektin GitHub-sivun mukaan. Nuo toiminnot ovat tuonti(), viedä()ja muuntaa().

Joten, Rio-paketilla on vain yksi toiminto lukea monissa erityyppisissä tiedostoissa: tuonti(). Jos sinä tuonti ("myfile.csv"), se tietää käyttävän toimintoa CSV-tiedoston lukemiseen. tuonti ("myspreadsheet.xlsx") toimii samalla tavalla. Itse asiassa Rio käsittelee yli kaksi tusinaa muotoa, mukaan lukien välilehdillä erotetut tiedot (laajennuksella .tsv), JSON, Stata ja kiinteän leveyden muotoiset tiedot (.fwf).

Tätä opetusohjelmaa varten tarvitaan paketteja

  • Rio
  • htmltab
  • lukeaxl
  • googlesheets
  • pacman
  • talonmies
  • rmiscutils (pm GitHub) tai readr
  • säkki

Kun olet analysoinut tietosi, jos haluat tallentaa tulokset CSV-, Excel-laskentataulukkona tai muina muotoina, Rio viedä() toiminto voi käsitellä sitä.

Jos sinulla ei vielä ole rio-pakettia järjestelmässäsi, asenna se nyt install.packages ("rio").

Olen määrittänyt joitain näytetietoja Bostonin talvisateista. Voisit siirtyä osoitteeseen //bit.ly/BostonSnowfallCSV ja napsauttaa hiiren kakkospainikkeella tallentaaksesi tiedoston nimellä BostonWinterSnowfalls.csv nykyiseen R-projektin työhakemistoon. Mutta yksi komentosarjojen kohdista on korvata manuaalinen työ - ikävä tai muutenkin - helposti toistettavalla automaatiolla. Sen sijaan, että napsautat lataamista, voit käyttää R: itä lataa tiedosto toiminto syntaksin kanssa download.file ("url", "destinationFileName.csv"):

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

Tämä olettaa, että järjestelmäsi ohjaa kyseisen Bit.ly-URL-pikakuvakkeen ja löytää todellisen tiedoston URL-osoitteen //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv. Minulla on toisinaan ollut ongelmia verkkosisällön käyttämisessä vanhoilla Windows-tietokoneilla. Jos sinulla on yksi näistä ja tämä Bit.ly-linkki ei toimi, voit vaihtaa todellisen URL-osoitteen Bit.ly-linkille. Toinen vaihtoehto on päivittää Windows-tietokoneesi Windows 10: ksi, jos mahdollista nähdäksesi, onko se temppu.

Jos haluat, että rio voisi vain tuoda tietoja suoraan URL-osoitteesta, itse asiassa se voi, ja pääsen siihen seuraavassa osiossa. Kohta Tämä osio on saada käytäntöä työskentelemään paikallisen tiedoston kanssa.

Kun sinulla on testitiedosto paikallisessa järjestelmässä, voit ladata nämä tiedot R-objektiin nimeltä snowdata koodilla:

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

Huomaa, että on mahdollista, että rio pyytää sinua lataamaan tiedoston uudelleen binaarimuodossa, jolloin sinun on suoritettava

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

Varmista, että käytät RStudion välilehden täyttövaihtoehtoja. Jos kirjoitat rio :: ja odota, saat luettelon kaikista käytettävissä olevista toiminnoista. Tyyppi lumi ja odota, ja sinun pitäisi nähdä vaihtoehtona objektin koko nimi. Käytä ylös- ja alas-nuolinäppäimiä siirtyäksesi automaattisen täydennyksen ehdotusten välillä. Kun haluamasi vaihtoehto on korostettu, paina Sarkain-näppäintä (tai Enter), jotta koko objektin tai toiminnon nimi lisätään komentosarjaasi.

Sinun pitäisi nähdä esine lumitiedot näkyvät ympäristö-välilehdessä RStudion oikeassa yläkulmassa. (Jos oikeassa yläkulmassa näkyy komentohistoria Ympäristön sijasta, valitse Ympäristö-välilehti.)

Taylor & Francis -ryhmä

lumitiedot pitäisi osoittaa, että siinä on 76 “obs.” - havainnot tai rivit - ja kaksi muuttujaa tai saraketta. Jos napsautat nuolta vasemmalla lumitiedot Jos haluat laajentaa luetteloa, näet sarakkeiden kaksi nimeä ja kunkin sarakkeen sisältämän datan tyypin. Talvi on merkkijonot ja Kaikki yhteensä sarake on numeerinen. Sinun pitäisi myös nähdä kunkin sarakkeen muutama ensimmäinen arvo Ympäristö-ruudussa.

Taylor & Francis -ryhmä

Napsauta sanaa lumitiedot itsessään Ympäristö-välilehdessä, jolloin saat enemmän tietoja taulukkolaskentamuodosta. Voit saada saman näkymän R-konsolista komennolla Näkymä (lumitiedot) (sen on oltava iso V-näkymä näkymässä -näkymä ei toimi). merkintä: lumitiedot ei ole lainausmerkeissä, koska viittaat R-objekti ympäristössäsi. vuonna rio :: tuonti komento ennen, BostonWinterSnowfalls.csv On lainausmerkeissä, koska se ei ole R-objekti; se on R: n ulkopuolella olevan tiedoston merkkijononimi.

Taylor & Francis -ryhmä

Tässä näkymässä on pari laskentataulukon kaltaista käyttäytymistä. Napsauta sarakkeen otsikkoa, jotta se lajitellaan kyseisen sarakkeen arvojen mukaan nousevassa järjestyksessä. napsauta samaa sarakeotsikkoa toisen kerran lajitellaksesi laskevassa järjestyksessä. Tietyt merkit vastaavat rivit löytyvät hakukentästä.

Jos napsautat Suodatin-kuvaketta, saat suodattimen jokaiselle sarakkeelle. Talvi merkkisarake toimii odotetusti ja suodattaa kaikki rivit, jotka sisältävät kirjoittamasi merkit. Jos napsautat Kaikki yhteensä numeerisen sarakkeen suodatin näyttää kuitenkin, että vanhemmissa RStudion versioissa on liukusäädin, kun taas uudemmissa histogrammi ja laatikko suodattamista varten.

Tuo tiedosto verkosta

Jos haluat ladata ja tuoda tiedoston verkosta, voit tehdä sen, jos se on julkisesti saatavilla ja sellaisessa muodossa kuin Excel tai CSV. Yrittää

lumitiedot <- rio :: import ("// bit.ly/BostonSnowfallCSV", muoto)

Monet järjestelmät voivat seurata uudelleenohjaavaa URL-osoitetta tiedostoon, vaikka olisit ensin antanut virheilmoituksen, kunhan määrität muodon "csv" koska tiedoston nimi tässä ei sisällä .csv. Jos sinun ei toimi, käytä sen sijaan URL-osoitetta //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv.

rio voi myös tuoda hyvin muotoiltuja HTML-taulukoita verkkosivuilta, mutta taulukoiden on oltava erittäin hyvin muotoiltu. Oletetaan, että haluat ladata taulukon, joka kuvaa kansallisen sääpalvelun vakavuusluokitusta lumimyrskyille. Kansallisissa ympäristötietokeskusten alueellisissa lumisateen hakemisto -sivulla on vain yksi hyvin muotoiltu taulukko, joten tällaisen koodin pitäisi toimia:

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

Huomaa vielä kerran, että sinun on sisällytettävä muoto tässä tapauksessa format = "html" . koska URL-osoite itsessään ei osoita minkäänlaista tiedostoa. Jos URL-osoite sisälsi tiedostonimen ja .html jatko, Rio tietäisi.

Tosielämässä verkkodata näkyy kuitenkin harvoin niin siistissä, eristetyssä muodossa. Hyvä vaihtoehto tapauksissa, jotka eivät ole aivan yhtä hyvin muotoiltuja, on usein htmltab-paketti. Asenna se install.packages ("htmltab"). Paketin toimintoa HTML-taulukon lukemiseen kutsutaan myös nimellä htmltab. Mutta jos suoritat tämän:

kirjasto (htmltab) kaupunkitaulukko <- htmltab ("// fi.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (kaupunkitaulukko)

huomaat, että sinulla ei ole oikeaa taulukkoa, koska datakehys sisältää yhden objektin. Koska en määrittänyt mikä taulukosta, se veti sivun ensimmäisen HTML-taulukon. Se ei sattumalta ollut sitä mitä haluan. En halua tuoda sivun kaikkia taulukoita, ennen kuin löydän oikean taulukon, mutta onneksi minulla on Chrome-laajennus nimeltä Table Capture, jonka avulla voin tarkastella luetteloa sivulla olevista taulukoista.

Viime kerralla tarkistin, halusin taulukon 5, jossa oli yli 300 riviä. Jos se ei toimi nyt, yritä asentaa Table Capture Chrome-selaimeen tarkistaaksesi, minkä taulukon haluat ladata.

Yritän uudelleen, määritän taulukon 5 ja näen sitten sarakkeiden nimet uudessa kaupunkitaulukossa. Huomaa, että seuraavaan koodiin laitan kaupunkitaulukko <- htmltab () komento usealle riville. Joten se ei ylittänyt marginaaleja - voit pitää kaiken yhdellä rivillä. Jos taulukon numero on muuttunut tämän artikkelin julkaisemisen jälkeen, korvaa se mikä = 5 oikealla numerolla.

Sen sijaan, että käyttäisit Wikipedian sivua, voit korvata Wikipedian URL-osoitteen luomani tiedoston kopion URL-osoitteella. Tämä tiedosto on osoitteessa //bit.ly/WikiCityList. Käytä tätä versiota kirjoittamalla bit.ly/WikiCityList selaimeen ja kopioi sitten pitkä URL-osoite, johon se uudelleenohjaa ja käyttää että alla olevan koodin Wikipedia-URL-osoitteen sijaan:

kirjasto (htmltab) kaupunkitaulukko <- htmltab ("// fi.wikipedia.org/wiki/List_of_United_States_cities_by_population", mikä = 5) Colnames (citytable)

Mistä tiesin mikä olinko tarvitsema argumentti taulukon numeron määrittämiseksi? Luin htmltab ohjetiedosto komennolla ? htmltab. Se sisälsi kaikki käytettävissä olevat argumentit. Skannasin mahdollisuudet, jamikä vektori, jonka pituus on yksi asiakirjan taulukon tunnistamiseksi ”näytti oikealta.

Huomaa myös, että käytin Colnames (kaupunkitaulukko) sijasta nimet (kaupunkitaulukko) nähdäksesi sarakkeiden nimet. Kumpikin toimii. Tukiasemalla R on myösrownames () toiminto.

Joka tapauksessa nämä taulukon tulokset ovat paljon parempia, vaikka voit nähdä juoksemisesta str (kaupunkitaulukko) että pari saraketta, joiden pitäisi olla numeroita, tuli merkkijonoina. Voit nähdä tämän molemmat chr sarakkeen nimen ja lainausmerkkien vieressä, kuten 8,550,405.

Tämä on yksi R: n pienistä harmista: R ei yleensä ymmärrä sitä 8,550 on luku. Käsittelin tämän ongelman itse kirjoittamalla oman funktioni omaan rmiscutils-pakettiin kääntääksesi kaikki ne "merkkijonot", jotka ovat todella numeroita, joissa on pilkkuja, takaisin numeroiksi. Kuka tahansa voi ladata paketin GitHubista ja käyttää sitä.

Suosituin tapa asentaa paketteja GitHubista on käyttää devtools-nimistä pakettia. devtools on erittäin tehokas paketti, joka on suunniteltu lähinnä ihmisille, jotka haluavat kirjoittaa ne oma paketteja, ja se sisältää muutaman tavan asentaa paketteja muualta kuin CRAN. Devtools vaatii kuitenkin yleensä pari ylimääräistä asennusvaihetta verrattuna tyypilliseen pakettiin, ja haluan jättää ärsyttävät järjestelmänvalvojan tehtävät, kunnes se on ehdottoman välttämätöntä.

Pacman-paketti kuitenkin asentaa paketit myös muista kuin CRAN-lähteistä, kuten GitHub. Jos et ole vielä asentanut pacmania, asenna se install.packages ("pacman").

pacmanin p_install_gh ("käyttäjänimi / packagerepo") toiminto asennetaan GitHub-reposta.

p_load_gh ("käyttäjätunnus / packagerepo")kuormia paketti muistiin, jos se on jo olemassa järjestelmässäsi, ja se ensin asentaa ja lataa sitten paketin GitHubista, jos pakettia ei ole paikallisesti.

Oma rmisc-apuohjelmapaketti löytyy osoitteesta smach / rmiscutils. Juosta pacman :: p_load_gh ("smach / rmiscutils") asentaa rmiscutils-pakettini.

Huomaa: Vaihtoehtoista pakettia GitHubin pakettien asentamiseksi kutsutaan kaukosäätimiksi, joiden kautta voit asentaainstall.packages ("kaukosäätimet"). Sen päätarkoitus on asentaa paketteja etätietovarastoista, kuten GitHub. Voit tarkastella ohjetiedostoa ohje (paketti = "kaukosäätimet").

Ja mahdollisesti kaikkein ohuin on paketti nimeltä githubinstall. Sen tarkoituksena on arvata repo, jossa paketti sijaitsee. Asenna se kauttainstall.packages ("githubinstall"); sitten voit asentaa rmiscutils-paketin käyttämällägithubinstall :: gh_install_packages ("rmiscutils"). Sinulta kysytään, haluatko asentaa paketin osoitteeseen smach / rmisutils (teet).

Nyt kun olet asentanut toimintokokoelmani, voit käyttää omaa numero_ominaisuuksilla () toiminto muuttaa niitä merkkijonoja, joiden pitäisi olla numeroita, takaisin numeroiksi. Ehdotan vahvasti uuden sarakkeen lisäämistä tietokehykseen nykyisen sarakkeen muokkaamisen sijaan - se on hyvä tietojen analysointikäytäntö riippumatta siitä, mitä alustaa käytät.

Tässä esimerkissä kutsun uutta saraketta PopEst2017. (Jos taulukkoa on päivitetty sen jälkeen, käytä sopivia sarakkeiden nimiä.)

kirjasto (rmiscutils) kaupunkitaulukko $ PopEst2017 <- number_with_commas (citytable $ `2017 -arvio`)

Rmiscutils-pakettini ei ole ainoa tapa käsitellä tuotuja numeroita, joissa on pilkkuja. Kun olen luonut rmiscutils-paketin ja sen numero_ominaisuuksilla () toiminto, tidyverse readr -paketti syntyi. readr sisältää myös toiminnon, joka muuttaa merkkijonot numeroiksi, parse_number ().

Kun readr on asennettu, voit luoda lukuja vuoden 2017 arvio sarakkeesta readr:

kaupunkitaulukko $ PopEst2017 <- readr :: parse_number (kaupunkitaulukon $ `2017 arvio ')

Yksi etu readr :: parse_numero () on, että voit määrittää oman locale () hallita asioita, kuten koodausta ja desimaalimerkkejä, jotka saattavat kiinnostaa muita kuin yhdysvaltalaisia ​​lukijoita. Juosta ? parse_number saadaksesi lisätietoja.

Huomaa: Jos et käyttänyt välilehden täydennystä vuoden 2017 arvio -sarakkeessa, sinulla saattaa olla ongelmia kyseisen sarakkeen nimen kanssa, jos siinä on välilyönti koodia suoritettaessa. Yllä olevassa koodissani huomaa, että taaksepäin on yksittäisiä lainausmerkkejä (`) sarakkeen nimen ympärillä. Tämä johtuu siitä, että olemassa olevassa nimessä oli välilyönti, jota sinun ei pitäisi olla R: ssä. Tämän sarakkeen nimellä on toinen ongelma: Se alkaa luvulla, yleensä myös R-ei-ei. RStudio tietää tämän ja lisää tarvittavat takaisin lainaukset nimen ympärille sarkaimen automaattisella täydennyksellä.

Bonusvinkki: Siellä on R-paketti (tietysti on!), Jota kutsutaan talonmieheksi, joka voi automaattisesti korjata ei-R-ystävällisestä tietolähteestä tuotavat ongelmalliset sarakkeiden nimet. Asenna se install.packages ("talonmies"). Sitten voit luoda uusia puhtaita sarakkeiden nimiä talonmiehen avulla puhtaat_nimet () toiminto.

Nyt luon kokonaan uuden datakehyksen sen sijaan, että muuttaisin sarakkeiden nimiä alkuperäisessä datakehyksessäni, ja suoritan talonmiehen puhtaat_nimet () alkuperäisissä tiedoissa. Tarkista sitten datakehyksen sarakkeiden nimet nimet ():

citytable_cleaned <- talonmies :: siistit_nimet (citytable)

nimet (kaupunkipöytä_puhdistettu)

Välit on muutettu alaviivoiksi, jotka ovat laillisia R-muuttujien nimissä (kuten pisteet). Ja kaikilla sarakkeiden nimillä, jotka alkoivat aloittaa numerolla, on nyt x alussa.

Jos et halua tuhlata muistia, sillä sinulla on kaksi kopiota olennaisesti samoista tiedoista, voit poistaa R-objektin työistunnostasirm () toiminto: rm (kaupunkitaulukko).

Tuo tietoja paketeista

On olemassa useita paketteja, joiden avulla voit käyttää tietoja suoraan R.: stä. Yksi on quantmod, jonka avulla voit vetää joitain Yhdysvaltain hallitus- ja taloustietoja suoraan R.

Toinen on osuvasti nimetty Weatherdata-paketti CRAN: lla. Se voi hakea tietoja Weather Underground -sovellusliittymästä, jolla on tietoja monista maista ympäri maailmaa.

Rnoaa-paketti, rOpenSci-ryhmän projekti, sisältää useita Yhdysvaltain kansallisen valtameren ja ilmakehän hallinnon tietojoukkoja, mukaan lukien päivittäiset ilmasto-, poiju- ja myrskytiedot.

Jos olet kiinnostunut osavaltioiden tai paikallishallinnon tiedoista Yhdysvalloissa tai Kanadassa, kannattaa ehkä tarkistaa RSocrata-sivustolta, onko virasto, josta olet kiinnostunut, lähettämään siellä tietoja. En ole vielä löytänyt täydellistä luetteloa kaikista käytettävissä olevista Socrata-tietojoukoista, mutta hakusivu on osoitteessa //www.opendatanetwork.com. Ole kuitenkin varovainen: On olemassa yhteisön lähettämiä sarjoja yhdessä virallisten valtion tietojen kanssa, joten tarkista tietojoukon omistaja ja lähde ennen kuin luotat niihin enemmän kuin R-käytäntöön. Tuloksen ODN-tietojoukko tarkoittaa, että tiedosto on jonkun suuren yleisön lataama. Hallituksen viralliset tietojoukot elävät yleensä URL-osoitteissa, kuten //data.CityOrStateName.gov ja//data.CityOrStateName.us.

Lisätietoja tietojen tuontipaketeista on hakukartassani osoitteessa //bit.ly/RDataPkgs. Jos työskentelet Yhdysvaltain hallituksen tietojen kanssa, saatat olla erityisen kiinnostunut väestönlaskennasta ja päivittäisestä väestönlaskennasta, jotka molemmat hyödyntävät Yhdysvaltain väestönlaskentatoimiston tietoja. Muita hyödyllisiä valtionhallinnon tietopaketteja ovat Yhdysvaltain ja Euroopan unionin hallitusten eu.us.opendata, jotta molempien alueiden tietojen vertailua olisi helpompaa, ja Kanadan väestönlaskentatietojen laskenta.

Kun tietoja ei ole muotoiltu parhaalla mahdollisella tavalla

Kaikissa näissä näytetiedoissa tiedot eivät ole vain hyvin muotoiltuja, vaan myös ihanteellisia: Kun löysin sen, se oli täydellisesti jäsennelty R: lle. Mitä tarkoitan tällä? Se oli suorakulmainen, ja jokaisella solulla oli yksi arvo yhdistettyjen solujen sijaan. Ensimmäisellä rivillä oli sarakeotsikot, toisin kuin otsikkorivi isolla kirjasimella useiden solujen yli, jotta se näyttäisi hyvältä - tai ei ollenkaan sarakeotsikoita.

Siistien tietojen käsittely voi valitettavasti olla melko monimutkaista. Mutta on olemassa muutama yleinen ongelma, jotka on helppo korjata.

Aloitusrivit, jotka eivät ole osa dataa. Jos tiedät, että Excel-laskentataulukon muutamalla ensimmäisellä rivillä ei ole haluamiasi tietoja, voit kehottaa Rioota ohittamaan yhden tai useamman rivin. Syntaksi on rio :: import ("mySpreadsheet.xlsx", ohita = 3) sulkea kolme ensimmäistä riviä. ohita vie kokonaisluvun.

Laskentataulukossa ei ole sarakkeiden nimiä. Oletustuonti edellyttää, että taulukon ensimmäinen rivi on sarakkeiden nimet. Jos tietosi ei Jos sinulla on otsikoita, tietojesi ensimmäinen rivi voi päätyä sarakeotsikoiksi. Käytä sitä rio :: import ("mySpreadsheet.xlsx", col_names = EPÄTOSI) joten R tuottaa oletusotsikot X0, X1, X2 ja niin edelleen. Tai käytä syntaksia, kuten rio :: import ("mySpreadsheet.xlsx", col_names = c ("kaupunki", "osavaltio", "populaatio")) asettaa omat sarakkeiden nimet.

Jos laskentataulukossa on useita välilehtiä, mikä argumentti ohittaa ensimmäisen laskentataulukon oletusarvon. rio :: import ("mySpreadsheet.xlsx", mikä = 2) lukee toisessa laskentataulukossa.

Mikä on datakehys? Ja mitä voit tehdä yhdellä?

rio tuo laskentataulukon tai CSV-tiedoston R-tiedostona datakehys. Mistä tiedät, onko sinulla datakehys? Siinä tapauksessa että lumitiedot, luokka (lumitiedot) palauttaa objektin luokan tai tyypin. str (lumitiedot) kertoo myös luokan ja lisää hieman lisätietoja. Suuri osa tiedoista, joita näet str () on samanlainen kuin mitä näit tässä esimerkissä RStudio-ympäristöruudussa: lumitiedot on 76 havaintoa (rivit) ja kaksi muuttujaa (sarakkeet).

Tietokehykset ovat jonkin verran kuin laskentataulukoita, koska niissä on sarakkeita ja rivejä. Datakehykset ovat kuitenkin jäsenneltyjä. Jokainen tietokehyksen sarake on R vektori, mikä tarkoittaa sitä jokaisen sarakkeen kohteen on oltava sama tietotyyppi. Yksi sarake voi olla kaikki numerot ja toinen sarake voi olla kaikki merkkijonot, mutta sarakkeessa tietojen on oltava johdonmukaisia.

Jos sinulla on tietokehyssarake, jonka arvot ovat 5, 7, 4 ja "tuleva arvo", R ei ole yksinkertaisesti tyytymätön ja antaa sinulle virheen. Sen sijaan se pakottaa kaikki arvosi samaksi tietotyypiksi. Koska tuleva arvo ei muutu luvuksi, 5, 7 ja 4 muutetaan lopulta merkkijonoiksi "5", "7"ja "4". Tämä ei yleensä ole mitä haluat, joten on tärkeää olla tietoinen siitä, minkä tyyppisiä tietoja kussakin sarakkeessa on. Yksi harhamainen merkkijonoarvo 1000 numeron sarakkeessa voi muuttaa koko merkin. Jos haluat numeroita, varmista, että sinulla on ne!

R: llä on tapoja viitata puuttuviin tietoihin, jotka eivät ruuvaa muita sarakkeita: NA tarkoittaa "ei saatavilla".

Tietokehykset ovat suorakaiteen muotoisia: Jokaisella rivillä on oltava sama määrä merkintöjä (vaikka jotkut voivat olla tyhjiä), ja jokaisessa sarakkeessa on oltava sama määrä kohteita.

Excel-laskentataulukon sarakkeisiin viitataan tyypillisesti kirjaimilla: Sarake A, Sarake B jne. Voit viitata tietokehyssarakkeeseen sen nimen kanssa käyttämällä syntaksia dataFrameName $ columnName. Joten, jos kirjoitat snowdata $ Yhteensä ja paina Enter, näet kaikki arvot Kaikki yhteensä sarakkeessa alla olevan kuvan mukaisesti. (Siksi kun suoritat str (lumitiedot) -komennon, jokaisen sarakkeen nimen edessä on dollarin merkki.)

Taylor & Francis -ryhmä

Muistutus siitä, että luettelon vasemmalla puolella olevat suluissa olevat numerot eivät ole osa tietoja; he vain kertovat, mistä sijainnista kukin tietorivi alkaa. [1] tarkoittaa, että rivi alkaa vektorin ensimmäisestä alkiosta, [10] kymmenes jne.

RStudio-välilehden viimeistely toimii datakehyssarakkeiden nimien sekä objekti- ja funktionimien kanssa. Tämä on melko hyödyllistä varmistaaksesi, ettet kirjoita sarakkeen nimeä väärin ja rikkoa komentosarjaasi - ja se säästää myös kirjoittamisen, jos sinulla on pitkiä sarakkeiden nimiä.

Tyyppi lumitiedot $ ja odota, niin näet luettelon kaikista sarakkeiden nimistä snowdatassa.

Sarakkeen lisääminen datakehykseen on helppoa. Tällä hetkellä Kaikki yhteensä sarake näyttää talven lumisateet tuumina. Voit lisätä sarakkeen, joka näyttää kokonaismäärän metreinä, käyttämällä tätä muotoa:

lumitiedot $ Metrit <- lumitiedot $ Yhteensä * 0.0254

Uuden sarakkeen nimi on vasemmalla, ja oikealla on kaava. Olet ehkä käyttänyt Excelissä = A2 * 0,0254 ja kopioi sitten kaavan alas sarakkeeseen. Komentosarjan avulla sinun ei tarvitse huolehtia siitä, oletko soveltanut kaavaa oikein kaikkiin sarakkeen arvoihin.

Katsokaa nyt lumitiedot objekti Ympäristö-välilehdessä. Sillä tulisi olla kolmas muuttuja, Mittarit.

Koska lumitiedot on datakehys, sillä on tiettyjä datakehyksen ominaisuuksia, joita voit käyttää komentoriviltä. nrow (lumitiedot) antaa sinulle rivien ja ncol (lumitiedot) sarakkeiden lukumäärä. Kyllä, voit tarkastella tätä RStudio-ympäristössä nähdäksesi, kuinka monta havaintoa ja muuttujaa siellä on, mutta todennäköisesti on aikoja, jolloin haluat tietää tämän osana komentosarjaa. Colnames (lumitiedot) tai nimet (lumitiedot) antaa sinulle nimen lumitiedot sarakkeita. rownames (lumitiedot) antaa sinulle mitä tahansa rivien nimiä (jos mitään ei ole asetettu, se oletusarvoisesti merkitsee rivinumeron merkkijonoja, kuten "1", "2", "3", jne.).

Jotkut näistä erityisistä datakehystoiminnoista tunnetaan myös nimellä menetelmiä, ei vain anna sinulle tietoja, vaan antaa sinun muuttaa datakehyksen ominaisuuksia. Niin, nimet (lumitiedot) kertoo sarakkeiden nimet datakehyksessä, mutta

nimet (lumitiedot) <- c ("Winter", "SnowInches", "SnowMeters")

muutoksia sarakkeiden nimet datakehyksessä.

Sinun ei todennäköisesti tarvitse tietää kaikkia käytettävissä olevia menetelmiä datakehysobjektille, mutta jos olet utelias, metodit (luokka = luokka (lumitiedot)) näyttää ne. Lisätietoja mistä tahansa menetelmästä, suorita tavallinen ohjekysely kysymysmerkillä, kuten ?yhdistää tai ? osajoukko.

Kun numero ei oikeastaan ​​ole numero

Postinumerot ovat hyvä esimerkki "numeroista", joita ei oikeastaan ​​tule pitää sellaisina. Vaikka teknisesti numeerinen, ei ole järkevää tehdä asioita, kuten lisätä kaksi postinumeroa yhteen tai ottaa keskimäärin postinumeroita yhteisössä. Jos tuot postinumerosarakkeen, R muuttaa sen todennäköisesti numerosarakkeeksi. Ja jos olet tekemisissä alueilla New England, joiden postinumero alkaa 0: lla, 0 katoaa.

Minulla on välilehdillä erotettu tiedosto Bostonin postinumeroista naapuruston mukaan, ladattu Massachusettsin valtion virastolta osoitteesta //raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt Jos yritin tuoda sen vetoketjut <- rio :: import ("bostonzips.txt"), postinumerot tulisivat nimillä 2118, 2119 jne. eivätkä 02118, 02119 jne.

Täällä se auttaa tietämään vähän rion toiminnasta tuonti() toiminto käyttää. Löydät nämä taustalla olevat toiminnot lukemalla tuonti ohjetiedosto osoitteessa ?tuonti. Sarkaimilla erotettujen tiedostojen vetämistä varten tuonti käyttää joko leipä () data.table-paketista tai R-pohjasta read.table () toiminto. ? Lue taulukko ohje sanoo, että voit määrittää sarakeluokit colClasses Perustelu.

Luo tietohakemisto nykyiseen projektihakemistoon ja lataa sitten bostonzips.txt-tiedosto

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

Jos tuot tämän tiedoston, jossa molemmat sarakkeet määritetään merkkijonoina, postinumero on muotoiltu oikein:

vetoketjut <- rio :: import ("data / bostonzips.txt", colClasses = c ("merkki" "," merkki ")) str (vetoketjut)

Huomaa, että sarakeluokat on asetettava käyttämällä c () toiminto, c ("merkki", "merkki"). Jos yritit colClasses, "merkki", saat virheilmoituksen. Tämä on tyypillinen virhe aloittelijoille R, mutta ei pitäisi kestää kauan päästä c () tapa.

Tallenna itsellesi-kirjoitusvinkki: Kirjoitetaan c ("merkki", "merkki") ei ole kaikki niin työlästä; mutta jos sinulla on laskentataulukko, jossa on 16 saraketta, joissa ensimmäisten 14 on oltava merkkijonoja, se voi ärsyttää. R: t edustaja () toiminto voi auttaa. edustaja (), kuten olet ehkä arvannut, toistaa minkä tahansa kohteen, jonka annat sille niin monta kertaa kuin kerrotkin, käyttämällä muotoa edustaja (myitem, numtimes). edustaja ("merkki", 2) on sama kuin c ("merkki", "merkki"), niin colClasses = rep ("merkki", 2) vastaa colClasses = c ("merkki", "merkki") . Ja, colClasses = c (rep ("merkki", 14), rep ("numeerinen", 2)) asettaa ensimmäiset 14 saraketta merkkijonoiksi ja kaksi viimeistä numeroksi. Kaikkien sarakeluokkien nimien on oltava lainausmerkeissä, koska nimet ovat merkkijonoja.

Ehdotan, että pelaat vähän edustaja () joten tottuu muotoon, koska se on syntaksia, jota myös muut R-toiminnot käyttävät.

Helppo näytetieto

R: ssä on joitain sisäänrakennettuja tietojoukkoja, joita on helppo käyttää, jos haluat pelata uusilla toiminnoilla tai muilla ohjelmointitekniikoilla. R: tä opettavat ihmiset käyttävät niitä paljon, koska ohjaajat voivat olla varmoja siitä, että kaikki opiskelijat aloittavat samat tiedot täsmälleen samassa muodossa.

Tyyppi tiedot () nähdäksesi käytettävissä olevat sisäänrakennetut tietojoukot tukiasemassa R ja asennetuista paketeista. data (paketti = .paketit (kaikki käytettävissä = TOSI)) Base R näyttää kaikki mahdolliset järjestelmään asennettujen pakettien tietojoukot riippumatta siitä, onko ne ladattu nykyisen työistunnon muistiin vai ei.

Saat lisätietoja tietojoukosta samalla tavalla kuin saat apua toimintojen suhteen: ? datasetname tai ohje ("datasetname"). mt-autot ja iiris ovat niiden joukossa, jotka olen nähnyt käyttäneen hyvin usein.

Jos kirjoitat mtcars, koko mtcars-tietojoukko tulostuu konsolissasi. Voit käyttää pää() toiminto tarkastella muutamia ensimmäisiä rivejä pää (mtcars).

Voit tallentaa kyseisen tietojoukon toiseen muuttujaan, jos haluat, esimerkiksi muodossa cardata <- mtcars.

Tai suorittamalla datatoiminto tietojoukon nimellä, kuten data (mtcars), lataa tietojoukon työympäristöön.

Yksi mielenkiintoisimmista paketeista, joiden näytetietojoukot ovat toimittajille, on viisikymmentäkahden paketti, joka sisältää tietoja tarinoista, jotka on julkaistu FiveThirtyEight.com-verkkosivustolla. Paketin loivat useat tutkijat yhteistyössä FiveThirtyEight-toimittajien kanssa. se on suunniteltu resurssiksi perustutkintotilastojen opettamiseen.

Valmiiksi pakatut tiedot voivat olla hyödyllisiä - ja joissakin tapauksissa hauskoja. Todellisessa maailmassa et kuitenkaan välttämättä käytä tietoja, jotka on pakattu niin kätevästi.

Luo tietokehys manuaalisesti R: ssä

Mahdollisuudet ovat, että olet usein tekemisissä tietojen kanssa, jotka alkavat R: n ulkopuolella ja tuodaan laskentataulukosta, CSV-tiedostosta, sovellusliittymästä tai muusta lähteestä. Mutta joskus haluat ehkä kirjoittaa pienen määrän tietoa suoraan R: ään tai luoda muuten datakehyksen manuaalisesti. Joten katsotaanpa nopeasti, miten se toimii.

R-datakehykset kootaan oletusarvoisesti sarakkeittain, ei yksi rivi kerrallaan. Jos halusit koota nopean datakehyksen kaupungin vaalituloksista, voit luoda vektorin ehdokkaiden nimistä, toisen vektorin heidän puoluekohtaisuutensa kanssa ja sitten vektorin heidän äänestyssummastaan:

ehdokkaat <- c ("Smith", "Jones", "Kirjoitukset", "Tyhjät")

puolue <- c ("demokraatti", "republikaani", "", "")

ääntä <- c (15248, 16723, 230, 5234)

Muista, ettet käytä pilkkuja numeroissasi, kuten saatat tehdä Excelissä.

Voit luoda datakehyksen näistä sarakkeista käyttämällä datakehys() toiminto ja synatx data.frame (sarake1, sarake2, sarake3).

omatulokset <- data.frame (ehdokkaat, puolue, äänet)

Tarkista sen rakenne str ():

str (myresults)

Vaikka ehdokkaat ja puolue vektorit ovat hahmoja, ehdokkaat ja puolue datakehyksen sarakkeet on muutettu R-objektiluokaksi, jota kutsutaan tekijöiksi. Tässä vaiheessa on vähän liian rikkakasveja syventyä siihen, kuinka tekijät eroavat hahmoista, paitsi sanoa niin

  1. Tekijöistä voi olla hyötyä, jos haluat tilata kohteita tietyllä, aakkosettomalla tavalla kaaviota ja muita tarkoituksia varten, kuten Huono on vähemmän kuin Reilu on vähemmän kuin Hyvä on vähemmän kuin Erinomainen.
  2. Tekijät voivat käyttäytyä eri tavalla kuin voit joskus odottaa. Suosittelen, että pidät kiinni merkkijonoista, ellei sinulla ole hyvää syytä haluta nimenomaan tekijöitä.

Voit pitää merkkijonosi ehjinä luodessasi tietokehyksiä lisäämällä argumentin stringsAsFactors = EPÄTOSI:

omatulokset <- data.frame (ehdokkaat, puolue, äänet, merkkijonotAsFactors = EPÄTOSI) str (omatulokset)

Nyt arvot ovat mitä odotit.

Vielä yksi asia, josta minun on varoitettava sinua luodessasi datakehyksiä tällä tavalla: Jos yksi sarake on lyhyempi kuin toinen (t), R toistaa joskus tietoja lyhyemmästä sarakkeesta -haluatko sen tapahtuvan.

Oletetaan, että olet esimerkiksi luonut vaalien tulossarakkeet ehdokkaille ja puolueille, mutta annoit äänestystulokset vain Smithille ja Jonesille, et kirjoita ja tyhjiä. Saatat odottaa, että datakehys näyttää kaksi muuta merkintää tyhjänä, mutta olisit väärässä. Kokeile ja näe luomalla uusi äänivektori vain kahdella numerolla ja luomalla uusi äänivektori uuden tietokehyksen luomiseen:

ääntä <- c (15248, 16723)

myresults2 <- data.frame (ehdokkaat, puolue, äänet)

str (myresults2)

Aivan oikein, R käytti kahta ensimmäistä numeroa uudelleen, mikä on varmasti ei mitä haluat. Jos kokeilet tätä kolmella numerolla äänivektorissa kahden tai neljän sijasta, R heittäisi virheen. Tämä johtuu siitä, että kutakin merkintää ei voitu kierrättää yhtä monta kertaa.

Jos ajattelet jo nyt: "Miksi en voi luoda datakehyksiä, jotka eivät muuta merkkijonoja tekijöiksi automaattisesti? Ja miksi minun on huolehdittava siitä, että tietokehykset käyttävät yhden sarakkeen tietoja uudelleen, jos unohdan täydentää kaikkia tietoja? " Hadley Wickhamilla oli sama ajatus. Hänen säkkipakettinsa luo R-luokan, jota kutsutaan myös tibbleiksi, jonka hän sanoo olevan "nykyaikainen otos datakehyksille. He pitävät ajan testin kestäneet ominaisuudet ja hylkäävät aiemmin kätevät, mutta nyt turhauttavat ominaisuudet. "

Jos tämä vetoaa sinuun, asenna tibble-paketti, jos se ei ole järjestelmässäsi, ja yritä sitten luoda tibble

myresults3 <- tibble :: tibble (ehdokkaat, puolue, äänet)

ja saat virheilmoituksen siitä, että äänisarakkeen on oltava joko 4 neliötä tai yksi pitkä (sänky () toistaa yhden kohteen niin monta kertaa kuin tarvitaan, mutta vain yhdelle kohteelle).

Laita äänet -sarakkeeseen neljä merkintää, jos haluat luoda tiblen näistä tiedoista:

kirjasto (sänky)

ääntä <- c (15248, 16723, 230, 5234)

myresults3 <- tibble (ehdokkaat, puolue, äänet)

str (myresults3)

Se näyttää samanlaiselta kuin datakehys - itse asiassa se On datakehys, mutta joillakin erityisillä tavoilla, kuten kuinka se tulostetaan. Huomaa myös, että ehdokkaiden sarake on merkkijonoja, ei tekijöitä.

Jos pidät tästä käyttäytymisestä, mene eteenpäin ja käytä säkkejä. Ottaen kuitenkin huomioon, kuinka edistykselliset tavanomaiset tietokehykset pysyvät R: ssä, on silti tärkeää tietää niiden oletuskäyttäytymiset.

Tietojen vienti

Usein sen jälkeen kun olet sekoittanut tietosi R: ään, haluat tallentaa tulokset. Tässä on joitain tapoja viedä tietosi, joita käytän eniten:

Tallenna CSV-tiedostoon kanssa rio :: export (omaObjektinimi, tiedosto = "omaTiedostonimi.csv") ja Excel-tiedostoon rio :: export (myObjectName, file = "myFileName.xlsx"). rio ymmärtää haluamasi tiedostomuodon tiedostonimen laajennuksen perusteella. Saatavilla on useita muita muotoja, mukaan lukien .tsv sarkaimilla erotetuille tiedoille, .json JSON: lle ja .xml XML: lle.

Tallenna R-binääriobjektiin mikä helpottaa lataamista takaisin R: ään tulevissa istunnoissa. On olemassa kaksi vaihtoehtoa.

Yleinen Tallentaa() tallentaa yhden tai useamman objektin tiedostoon, kuten tallenna (objectName1, objectName2, file = "oma tiedostonimi.RData"). Jos haluat lukea nämä tiedot takaisin R: ään, käytä vain komentoa lataa ("myfilename.RData") ja kaikki objektit palaavat samoilla nimillä samassa tilassa kuin heillä oli aikaisemmin.

Voit myös tallentaa yhden objektin tiedostoon saveRDS (myobject, tiedosto = "tiedostonimi.rds"). Looginen oletus on, että loadRDS lukisi tiedoston takaisin, mutta komento sen sijaan on readRDS—Ja tässä tapauksessa vain tiedot on tallennettu, ei objektin nimeä. Joten sinun on luettava tiedot uudeksi objektin nimeksi, kuten mydata <- readRDS ("tiedostonimi.rds").

On kolmas tapa tallentaa R-objekti nimenomaan R: lle: luoda R-komennot, jotka luovat objektin objektin sijaan lopullisilla tuloksilla. Perustoiminnot R-tiedoston luomiseksi objektin luomiseksi ovat dput () tai kaataa (). Kuitenkin löydän rio :: export (myobject, "mysavedfile.R") vielä helpompi muistaa.

Lopuksi on olemassa muita tapoja tallentaa tiedostoja, jotka optimoivat luettavuuden, nopeuden tai pakkaamisen, jotka mainitsen tämän artikkelin lopussa olevassa lisäresurssien osassa.

Voit myös viedä R-objektin Windows- tai Mac-leikepöydälle rion avulla: rio :: vienti (myObjectName, muoto). Ja voit tuoda tietoja R-leikepöydältä samalla tavalla: rio :: tuonti (tiedosto).

Bonus: Rio's muuntaa() toiminnon avulla voit arvata sen - muuntaa tiedostotyypin toiseen ilman, että sinun tarvitsee vetää tietoja manuaalisesti R: ään ja sitten ulos siitä. ?muuntaa lisätietoja.

Viimeinen asia: RStudion avulla voit tuoda tiedoston napsauttamalla koodia kirjoittamatta ollenkaan. Tätä en suosittele ennen kuin olet mukava tuoda komentoriviltä, ​​mutta mielestäni on tärkeää ymmärtää tuonnin takana oleva koodi. Mutta myönnän, että tämä voi olla kätevä pikakuvake.

Siirry RStudion oikean alakulman Tiedostot-välilehteen tuotavan tiedoston kohdalle ja napsauta sitä. Näet vaihtoehdon joko Näytä tiedosto tai Tuo tietojoukko. Valitse Tuo tietojoukko nähdäksesi valintaikkunan, joka esikatselee tietoja, antaa sinun muokata tietojen tuontia ja esikatsella luotavaa koodia.

Tee haluamasi muutokset ja napsauta Tuo, niin tietosi vedetään R: ään.

Lisäresurssit

Rio-vaihtoehdot. Vaikka rio on loistava Sveitsin armeijan tiedostojen käsittelyveitsi, saattaa joskus olla tilanteita, joissa haluat hieman paremmin hallita sitä, miten tietosi vedetään tai tallennetaan R: stä. Lisäksi on ollut aikoja, jolloin minulla on ollut haastava datatiedosto, jonka rio tukkii, mutta toinen paketti pystyi käsittelemään sitä. Jotkut muut toiminnot ja paketit, jotka haluat ehkä tutkia:

  • Pohja R: t read.csv () ja read.table () tuoda tekstitiedostoja (käytä ? read.csv ja ? Lue taulukko saadaksesi lisätietoja). stringsAsFactors = EPÄTOSI tarvitaan näiden kanssa, jos haluat pitää merkkijonosi merkkijonoina. kirjoita.csv () tallentaa CSV-tiedostoon.
  • rio käyttää Hadley Wickhamin readxl-pakettia Excel-tiedostojen lukemiseen. Toinen vaihtoehto Excelille on openxlsx, joka voi kirjoittaa sekä Excel-tiedostoon että lukea yhden. Katso openxlsx-pakettinigneteista tietoja laskentataulukoiden muotoilemisesta viennin aikana.
  • Wickhamin readr-paketti on myös syytä katsoa osana "tideversiota". readr sisältää toimintoja CSV: n, sarkaimilla erotettujen, kiinteän leveyden, verkkolokien ja useiden muiden tiedostotyyppien lukemiseen. readr tulostaa jokaiselle sarakkeelle määrittelemänsä datatyypin - kokonaisluku, merkki, kaksinkertainen (ei kokonaisluvut) jne. Se luo säkkejä.

Tuo suoraan Google-laskentataulukosta. Googlesheets-paketin avulla voit tuoda tietoja Google Sheets -taulukosta, vaikka se olisi yksityistä, todennamalla Google-tilisi. Paketti on saatavana CRAN: lla; asenna se kauttainstall.packages ("googlesheets"). Kun olet ladannut sen kirjasto ("googlesheets"), lue erinomainen esittelymatka. Tämän kirjoituksen aikaan intro-vinjetti oli saatavana R: ssä osoitteessa vinjetti ("basic-use", package = "googlesheets"). Jos et näe sitä, yritä ohje (package = "googlesheets") ja napsauta Käyttäjäoppaat, pakettinjetit ja muu dokumentaatio -linkkiä saadaksesi saatavilla olevat vinjetit tai katso pakettitiedot GitHubista osoitteessa //github.com/jennybc/googlesheets.

Kaavi tietoja verkkosivuilta rvest-paketin ja SelectorGadget-selainlaajennuksen tai JavaScript-kirjanmerkin avulla. SelectorGadget auttaa sinua löytämään kopioitavan datan CSS-elementit, jotka ovat HTML-sivulla; sitten rvest käyttää R: tä tietojen löytämiseen ja tallentamiseen. Tämä ei ole tekniikka aloittelijoille, mutta kun olet saanut jonkin verran R-kokemusta vyösi alla, saatat haluta palata takaisin ja käydä uudestaan. Minulla on joitain ohjeita ja video siitä, miten tämä tehdään osoitteessa //bit.ly/Rscraping. RStudiossa on myös verkkoseminaari saatavilla pyynnöstä.

Vaihtoehdot R: n tallennus- ja lukutoimintojen perustamiseen. Jos työskentelet suurten tietojoukkojen kanssa, nopeus voi tulla sinulle tärkeäksi tiedostoja tallennettaessa ja ladattaessa. Data.table-paketilla on nopea leipä () toiminto, mutta ole varovainen, että tuloksena olevat objektit ovat data.taulukoita eikä yksinkertaisia ​​datakehyksiä; jotkut käyttäytymistavat ovat erilaisia. Jos haluat tavallisen datakehyksen, voit saada sen as.data.frame (mydatatable) syntaksi. Data.table-paketti kirjoita () -toiminnon tarkoituksena on kirjoittaa CSV-tiedostoon huomattavasti nopeammin kuin Base R: t kirjoita.csv ().

Kaksi muuta pakettia voi kiinnostaa tietojen tallentamiseen ja noutamiseen. Höyhenpaketti tallentaa binaarimuodossa, joka voidaan lukea joko R- tai Python-muotoon. Ja ensimmäinen paketti Lue.fst () ja kirjoita.fst () tarjoavat nopean tallennuksen ja R-datakehysobjektien lataamisen - sekä mahdollisuuden pakata tiedostoja.