Programování

Výukový program R: Jak importovat data do R.

Získejte kompletní knihu
Practical R for Mass Communication and Journalism MSRP 59,95 $ Viz

Tento článek byl se souhlasem vydavatele vyjmut z části „Praktická publikace R pro masovou komunikaci a žurnalistiku“. © 2019 Taylor & Francis Group, LLC.

Než budete moci analyzovat a vizualizovat data, musíte je dostat do R. Existuje několik způsobů, jak to provést, v závislosti na tom, jak jsou vaše data formátována a kde se nacházejí.

Funkce, kterou používáte k importu dat, obvykle závisí na formátu souboru dat. V base R můžete například importovat soubor CSV pomocí read.csv (). Hadley Wickham vytvořil balíček s názvem readxl, který, jak můžete očekávat, má funkci pro čtení v souborech Excel. Existuje další balíček, googlesheets, pro načítání dat z tabulek Google.

Ale pokud si to všechno nechcete pamatovat, je tu rio.

Kouzlo Rio

„Cílem rio je co nejvíce usnadnit I / O datových souborů [import / výstup] v R implementací tří jednoduchých funkcí ve stylu švýcarské armády,“ uvádí stránka GitHub projektu. Tyto funkce jsou import(), vývozní(), a konvertovat().

Balíček rio má tedy jen jednu funkci pro čtení v mnoha různých typech souborů: import(). jestli ty import ("myfile.csv"), ví použít funkci ke čtení souboru CSV. import ("myspreadsheet.xlsx") funguje stejně. Ve skutečnosti rio zpracovává více než dvě desítky formátů včetně dat oddělených tabulátory (s příponou .tsv), JSON, Stata a dat formátu pevné šířky (.fwf).

Balíčky potřebné pro tento výukový program

  • rio
  • htmltab
  • readxl
  • googlesheets
  • pacman
  • vrátný
  • rmiscutils (pm GitHub) nebo znovu
  • tibble

Jakmile budete analyzovat svá data, chcete-li výsledky uložit jako CSV, tabulku Excel nebo jiné formáty, vývozní() funkce to zvládne.

Pokud balíček rio ve svém systému ještě nemáte, nainstalujte jej nyní s install.packages ("rio").

Nastavil jsem několik ukázkových dat s údaji o sněžení v Bostonu. Mohli byste se vydat na //bit.ly/BostonSnowfallCSV a klepnutím pravým tlačítkem uložit soubor jako BostonWinterSnowfalls.csv do aktuálního pracovního adresáře projektu R. Jedním z bodů skriptování je však nahradit manuální práci - zdlouhavou nebo jinou - automatizací, která se snadno reprodukuje. Místo stahování můžete použít R. stáhnout soubor funkce se syntaxí download.file ("url", "destinationFileName.csv"):

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

Předpokládá se, že váš systém přesměruje z této zástupce adresy URL Bit.ly a úspěšně najde skutečnou adresu URL souboru, //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv. Občas jsem měl problémy s přístupem k webovému obsahu na starých počítačích se systémem Windows. Pokud máte jeden z těchto a tento odkaz Bit.ly nefunguje, můžete zaměnit skutečnou adresu URL za odkaz Bit.ly. Další možností je upgradovat počítač se systémem Windows na Windows 10, pokud je to možné, abyste zjistili, zda to funguje.

Pokud si přejete, aby aplikace rio mohla importovat data přímo z adresy URL, ve skutečnosti to může být, a k tomu se dostanu v další části. Smysl tento v sekci je procvičit si práci s lokálním souborem.

Jakmile máte testovací soubor v místním systému, můžete tato data načíst do objektu R zvaného snowdata s kódem:

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

Je možné, že vás aplikace rio požádá o opětovné stažení souboru v binárním formátu, v takovém případě budete muset spustit

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

Ujistěte se, že používáte možnosti dokončení karty RStudio. Pokud píšete rio :: a počkejte, dostanete seznam všech dostupných funkcí. Typ sníh a počkejte a jako možnost byste měli vidět celý název vašeho objektu. Mezi návrhy automatického dokončování se můžete pohybovat pomocí kláves se šipkami nahoru a dolů. Jakmile je zvýrazněna požadovaná možnost, stisknutím klávesy Tab (nebo Enter) přidejte do skriptu celý název objektu nebo funkce.

Měli byste vidět objekt sněhová data se zobrazí na kartě prostředí v pravém horním podokně RStudio. (Pokud se v tomto pravém horním podokně místo vašeho prostředí zobrazuje váš příkaz Historie, vyberte kartu Prostředí.)

Taylor & Francis Group

sněhová data by měl ukázat, že má 76 „obs.“ - pozorování nebo řádky - a dvě proměnné nebo sloupce. Pokud kliknete na šipku vlevo od sněhová data Chcete-li seznam rozšířit, uvidíte dva názvy sloupců a typ dat, které každý sloupec obsahuje. The Zima je řetězec znaků a Celkový sloupec je číselný. Měli byste také vidět několik prvních hodnot každého sloupce v podokně Prostředí.

Taylor & Francis Group

Klikněte na slovo sněhová data na kartě Prostředí pro zobrazení vašich dat ve více tabulkách. Stejný pohled můžete získat z konzoly R pomocí příkazu Zobrazit (snowdata) (to musí být kapitál V v zobrazení -Pohled nebude fungovat). Poznámka: sněhová data není v uvozovkách, protože odkazujete na název souboru Objekt R ve vašem prostředí. V rio :: import velení před, BostonWinterSnowfalls.csv je v uvozovkách, protože to není R objekt; je to název řetězce znaků souboru mimo R.

Taylor & Francis Group

Toto zobrazení má několik chování podobných tabulkám. Kliknutím na záhlaví sloupce jej seřadíte vzestupně podle hodnot daného sloupce; kliknutím na záhlaví stejného sloupce podruhé seřadíte sestupně. K dispozici je vyhledávací pole, kde najdete řádky odpovídající určitým znakům.

Pokud kliknete na ikonu Filtr, získáte filtr pro každý sloupec. The Zima sloupec znaků funguje podle očekávání a filtruje všechny řádky obsahující znaky, které zadáváte. Pokud kliknete na ikonu Celkový filtr číselného sloupce, ale starší verze RStudia zobrazují posuvník, zatímco novější zobrazují histogram a pole pro filtrování.

Importujte soubor z webu

Chcete-li stáhnout a importovat soubor z webu, můžete tak učinit, pokud je veřejně dostupný a ve formátu, jako je Excel nebo CSV. Snaž se

snowdata <- rio :: import ("// bit.ly/BostonSnowfallCSV", formát)

Mnoho systémů může sledovat adresu URL přesměrování do souboru i po prvním zobrazení chybové zprávy, pokud uvedete formát jako "CSV" protože zde název souboru neobsahuje .csv. Pokud váš nebude fungovat, použijte místo toho URL //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv.

rio může také importovat dobře formátované tabulky HTML z webových stránek, ale tabulky musí být velmi dobře naformátovaný. Řekněme, že si chcete stáhnout tabulku, která popisuje hodnocení závažnosti Národní meteorologické služby pro sněhové bouře. Stránka Národního centra pro informace o životním prostředí s regionálním sněžením má pouze jednu tabulku, velmi dobře zpracovanou, takže by měl fungovat tento kód:

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

V tomto případě je třeba zahrnout formát format = "html" . protože samotná adresa URL neposkytuje žádné informace o tom, o jaký typ souboru se jedná. Pokud adresa URL obsahovala název souboru s příponou .html rozšíření, rio by to vědělo.

V reálném životě se však webová data zřídka objevují v takové čisté, izolované formě. Dobrou volbou pro případy, které nejsou tak dobře zpracované, je často balíček htmltab. Nainstalujte jej pomocí install.packages ("htmltab"). Funkce balíčku pro čtení tabulky HTML se také nazývá htmltab. Ale pokud spustíte toto:

knihovna (htmltab) městská tabulka <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (citytable)

vidíte, že nemáte správnou tabulku, protože datový rámec obsahuje jeden objekt. Protože jsem nespecifikoval který tabulka, vytáhla první tabulku HTML na stránce. To se mi náhodou nestalo. Nemám chuť importovat každou tabulku na stránce, dokud nenajdu tu správnou, ale naštěstí mám rozšíření pro Chrome s názvem Table Capture, které mi umožňuje zobrazit seznam tabulek na stránce.

Naposledy jsem zkontroloval tabulku 5 s více než 300 řádky, kterou jsem chtěl. Pokud to nyní nefunguje, zkuste nainstalovat Table Capture do prohlížeče Chrome a zkontrolujte, kterou tabulku chcete stáhnout.

Zkusím to znovu, zadám tabulku 5 a poté uvidím, jaké názvy sloupců jsou v nové městské tabulce. Všimněte si, že v následujícím kódu jsem vložil městská tabulka <- htmltab () příkaz na více řádcích. Je to proto, že to nepřekročilo okraje - vše můžete udržovat na jednom řádku. Pokud se od zveřejnění tohoto článku změnilo číslo tabulky, vyměňte jej což = 5 se správným číslem.

Místo použití stránky na Wikipedii můžete nahradit adresu URL Wikipedie adresou URL kopie souboru, který jsem vytvořil. Tento soubor je na //bit.ly/WikiCityList. Chcete-li použít tuto verzi, zadejte bit.ly/WikiCityList do prohlížeče, poté zkopírujte zdlouhavou adresu URL, na kterou přesměruje, a použijte ji že namísto adresy URL Wikipedie v níže uvedeném kódu:

knihovna (htmltab) městská tabulka <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population", což = 5) sloupce (městská tabulka)

Jak jsem to věděl který byl argument, který jsem potřeboval k určení čísla tabulky? Přečetl jsem si htmltab soubor nápovědy pomocí příkazu ? htmltab. To zahrnovalo všechny dostupné argumenty. Naskenoval jsem možnosti a “který vektor délky jedna pro identifikaci tabulky v dokumentu “vypadal správně.

Všimněte si také, že jsem použil colnames (městská tabulka) namísto jména (městská tabulka) zobrazit názvy sloupců. Buď bude fungovat. Base R má takénázvy řádků () funkce.

Výsledky tabulky jsou každopádně mnohem lepší, i když je to vidět z běhu str (městská tabulka) že pár sloupců, kterými by měla být čísla, přišlo jako řetězce znaků. Můžete to vidět jak podle chr vedle názvu sloupce a uvozovek kolem hodnot jako 8,550,405.

Toto je jedna z malých nepříjemností R: R tomu obecně nerozumí 8,550 je číslo. S tímto problémem jsem se vypořádal sám tím, že jsem do svého vlastního balíčku rmiscutils napsal svou vlastní funkci, abych všechny ty „řetězce znaků“, které jsou ve skutečnosti čísly, změnil zpět na čísla. Balíček si může každý stáhnout z GitHubu a použít ho.

Nejpopulárnějším způsobem instalace balíčků z GitHubu je použití balíčku s názvem devtools. devtools je extrémně výkonný balíček určený hlavně pro lidi, kteří chtějí psát své vlastní balíčky a zahrnuje několik způsobů instalace balíčků z jiných míst kromě CRAN. Devtools však obvykle vyžaduje několik dalších kroků k instalaci ve srovnání s typickým balíčkem a chci nechat otravné úkoly správce systému, dokud to nebude naprosto nezbytné.

Balíček pacman však také nainstaluje balíčky ze zdrojů jiných než CRAN, jako je GitHub. Pokud jste to ještě neudělali, nainstalujte si pacman pomocí install.packages ("pacman").

pacmanův p_install_gh ("username / packagerepo") funkce se nainstaluje z repozitáře GitHub.

p_load_gh ("username / packagerepo")zatížení balíček do paměti, pokud již ve vašem systému existuje, a nejprve nainstaluje a poté načte balíček z GitHubu, pokud balíček místně neexistuje.

Můj balíček nástrojů rmisc najdete na smach / rmiscutils. Běh pacman :: p_load_gh ("smach / rmiscutils") nainstalovat můj balíček rmiscutils.

Poznámka: Alternativní balíček pro instalaci balíčků z GitHubu se nazývá dálkové ovladače, které můžete nainstalovat pomocíinstall.packages ("dálkové ovladače"). Jeho hlavním účelem je instalace balíčků ze vzdálených úložišť, jako je GitHub. Můžete se podívat na soubor nápovědy pomocí help (balíček = "dálkové ovladače").

A možná nejúžasnějším ze všech je balíček s názvem githubinstall. Jejím cílem je uhodnout repo, kde se balíček nachází. Nainstalujte jej pomocíinstall.packages ("githubinstall"); pak můžete nainstalovat můj balíček rmiscutils pomocígithubinstall :: gh_install_packages ("rmiscutils"). Jste dotázáni, zda chcete balíček nainstalovat na smach / rmisutils (děláš).

Nyní, když jste nainstalovali moji sbírku funkcí, můžete použít moji number_with_commas () funkce pro změnu řetězců znaků, které by měly být čísly zpět na čísla. Důrazně doporučuji přidat do datového rámce nový sloupec místo úpravy existujícího sloupce - to je dobrá praxe při analýze dat bez ohledu na to, jakou platformu používáte.

V tomto příkladu zavolám nový sloupec PopEst2017. (Pokud byla tabulka od té doby aktualizována, použijte příslušné názvy sloupců.)

knihovna (rmiscutils) městská tabulka $ PopEst2017 <- number_with_commas (městská tabulka $ `2017 odhad`)

Mimochodem, můj balíček rmiscutils není jediný způsob, jak se vypořádat s importovanými čísly, která mají čárky. Poté, co jsem vytvořil svůj balíček rmiscutils a jeho number_with_commas () funkce se zrodil balíček tidyverse readr. readr také obsahuje funkci, která mění řetězce znaků na čísla, parse_number ().

Po instalaci readr můžete vygenerovat čísla ze sloupce odhadu 2017 pomocí readr:

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

Jedna výhoda readr :: parse_number () je, že si můžete definovat vlastní národní prostředí () k ovládání věcí, jako je kódování a desetinná místa, které by mohly být zajímavé pro čtenáře mimo USA. Běh ? parse_number pro více informací.

Poznámka: Pokud jste ve sloupci odhadu pro rok 2017 nepoužili dokončení karty, mohli jste mít problém s názvem tohoto sloupce, pokud má v době, kdy používáte tento kód, mezeru. V mém kódu výše si všimněte, že existují zpětné jednoduché uvozovky (`) kolem názvu sloupce. Je to proto, že existující název měl v sobě mezeru, kterou byste v R. neměli mít. Název sloupce má další problém: Začíná to číslem, také obecně R ne-ne. RStudio to ví a automaticky přidává potřebné zpětné uvozovky kolem jména pomocí automatického doplňování karet.

Bonusový tip: K dispozici je balíček R (samozřejmě, že existuje!), Který se jmenuje správce, a který může automaticky opravit problémové názvy sloupců importovaných ze zdroje dat, který není vhodný pro R. Nainstalujte jej pomocí install.packages ("správce"). Potom můžete pomocí správce vytvořit nové čisté názvy sloupců clean_names () funkce.

Nyní místo změny názvů sloupců v mém původním datovém rámci vytvořím zcela nový datový rámec a na původní data spustím správce_čisté_jména (). Potom zkontrolujte názvy sloupců datového rámce pomocí jména ():

citytable_cleaned <- správce :: clean_names (citytable)

jména (citytable_cleaned)

Uvidíte, že mezery byly změněny na podtržítka, která jsou legální v názvech proměnných R (stejně jako tečky). A všechny názvy sloupců, které dříve začínaly číslem, nyní mají X na začátku.

Pokud nechcete plýtvat pamětí dvěma kopiemi v podstatě stejných dat, můžete objekt R z pracovní relace odebrat pomocírm () funkce: rm (městská tabulka).

Importujte data z balíčků

Existuje několik balíčků, které vám umožňují přistupovat k datům přímo z R. Jedním z nich je quantmod, který vám umožní přímo stáhnout některé vládní a finanční údaje z USA.

Dalším je příhodně pojmenovaný balíček weatherdata na CRANu. Může stahovat data z Weather Underground API, které obsahuje informace pro mnoho zemí po celém světě.

Balíček rnoaa, projekt ze skupiny rOpenSci, využívá několik různých datových souborů amerického Národního úřadu pro oceán a atmosféru, včetně informací o denním podnebí, bójkách a bouřích.

Pokud vás zajímají údaje o státní správě nebo místní správě v USA nebo Kanadě, možná budete chtít zkontrolovat RSocrata a zjistit, zda tam zveřejňuje údaje agentura, která vás zajímá. Ještě jsem nenašel kompletní seznam všech dostupných datových sad Socrata, ale na stránce //www.opendatanetwork.com existuje vyhledávací stránka. Buďte opatrní: Existují sady nahrané komunitou spolu s oficiálními vládními daty, takže než se na to budete spoléhat více než na R, zkontrolujte vlastníka sady dat a zdroj nahrávání. „Datová sada ODN“ ve výsledku znamená, že jde o soubor nahraný někým z široké veřejnosti. Oficiální vládní datové soubory mají tendenci žít na adresách URL jako //data.CityOrStateName.gov a//data.CityOrStateName.us.

Další balíčky pro import dat najdete v mé prohledávatelné tabulce na //bit.ly/RDataPkgs. Pokud pracujete s vládními údaji USA, mohl by vás zvláště zajímat censusapi a tidycensus, které obě využívají údajů amerického sčítání lidu. Mezi další užitečné vládní datové balíčky patří eu.us.opendata od vlád USA a Evropské unie, které usnadňují srovnávání údajů v obou regionech, a údaje o sčítání lidu z Kanady.

Když nejsou data v ideálním formátu

Ve všech těchto případech ukázkových dat byla data nejen dobře naformátovaná, ale také ideální: Jakmile jsem je našel, byla dokonale strukturovaná pro R. Co tím myslím? Byl obdélníkový, přičemž každá buňka měla místo sloučených buněk jednu hodnotu. A první řádek měl záhlaví sloupců, na rozdíl od řekněme nadpisového řádku velkým písmem napříč více buňkami, aby vypadal hezky - nebo vůbec žádné záhlaví sloupců.

Nakládání s neuspořádanými daty se bohužel může docela komplikovat. Existuje však několik běžných problémů, které lze snadno vyřešit.

Začínající řádky, které nejsou součástí dat. Pokud víte, že prvních několik řádků tabulky aplikace Excel neobsahuje požadovaná data, můžete rio říct, aby přeskočil jeden nebo více řádků. Syntaxe je rio :: import ("mySpreadsheet.xlsx", skip = 3) vyloučit první tři řádky. přeskočit bere celé číslo.

V tabulce nejsou žádné názvy sloupců. Výchozí import předpokládá, že první řádek listu je název sloupce. Pokud vaše data ne mít záhlaví, první řádek vašich dat může skončit jako záhlaví sloupců. Abyste tomu předešli, použijte rio :: import ("mySpreadsheet.xlsx", col_names = FALSE) takže R vygeneruje výchozí záhlaví X0, X1, X2 atd. Nebo použijte syntaxi, jako je rio :: import ("mySpreadsheet.xlsx", col_names = c ("město", "stát", "populace")) nastavit vlastní názvy sloupců.

Pokud je v tabulce více karet, zobrazí se který Argument přepíše výchozí čtení v prvním listu. rio :: import ("mySpreadsheet.xlsx", což = 2) čte ve druhém listu.

Co je datový rámec? A co můžete dělat s jedním?

rio importuje tabulkový soubor nebo soubor CSV jako R. datový rámec. Jak víte, zda máte datový rámec? V případě sněhová data, třída (snowdata) vrací třídu nebo typ objektu, který je. str (snowdata) také vám řekne třídu a přidá trochu více informací. Mnoho informací, se kterými se setkáte str () je podobné tomu, co jste viděli pro tento příklad v podokně prostředí RStudio: sněhová data má 76 pozorování (řádky) a dvě proměnné (sloupce).

Datové rámce jsou něco jako tabulky, protože mají sloupce a řádky. Datové rámce jsou však strukturovanější. Každý sloupec v datovém rámci je R vektor, což znamená, že každá položka ve sloupci musí být stejného datového typu. Jeden sloupec může být všechna čísla a jiný sloupec mohou být všechny řetězce, ale ve sloupci musí být data konzistentní.

Pokud máte sloupec datového rámce s hodnotami 5, 7, 4 a hodnotou „value to come“, R nebude jednoduše nešťastný a udělá vám chybu. Místo toho donutí všechny vaše hodnoty, aby byly stejného datového typu. Protože „hodnotu, která přijde“ nelze změnit na číslo, 5, 7 a 4 se nakonec změní na řetězce znaků "5", "7", a "4". Obvykle to není to, co chcete, takže je důležité si uvědomit, jaký typ dat je v každém sloupci. Jedna zbloudilá hodnota řetězce znaků ve sloupci s 1000 čísly může celou věc proměnit v znaky. Pokud chcete čísla, ujistěte se, že je máte!

R má způsoby, jak odkazovat na chybějící data, která nepokazí zbytek vašich sloupců: NA znamená „není k dispozici“.

Datové rámce jsou obdélníkové: Každý řádek musí mít stejný počet položek (i když některé mohou být prázdné) a každý sloupec musí mít stejný počet položek.

Sloupce tabulky aplikace Excel jsou obvykle označovány písmeny: Sloupec A, Sloupec B atd. Sloupec datového rámce můžete pojmenovat pomocí jeho syntaxe dataFrameName $ columnName. Pokud tedy píšete snowdata $ celkem a stiskněte Enter, uvidíte všechny hodnoty v Celkový sloupec, jak je znázorněno na obrázku níže. (Proto když spustíte str (snowdata) příkaz, před názvem každého sloupce je znak dolaru.)

Taylor & Francis Group

Připomenutí, že čísla v závorkách vlevo od výpisu nejsou součástí údajů; jen vám říkají, s jakou pozicí začíná každý řádek dat. [1] znamená, že řádek začíná první položkou ve vektoru, [10] desátý atd.

Dokončení karty RStudio pracuje s názvy sloupců datových rámců i názvy objektů a funkcí. To je docela užitečné, abyste se ujistili, že nesprávně nenapíšete název sloupce a neporušíte skript - a také to uloží psaní, pokud máte dlouhé názvy sloupců.

Typ snowdata $ a počkejte, pak uvidíte seznam všech názvů sloupců ve snowdata.

Je snadné přidat sloupec do datového rámce. V současné době Celkový sloupec zobrazuje zimní sněžení v palcích. Chcete-li přidat sloupec zobrazující součty v metrech, můžete použít tento formát:

snowdata $ Metry <- snowdata $ Celkem * 0,0254

Název nového sloupce je vlevo a vpravo je vzorec. V aplikaci Excel jste možná použili = A2 * 0,0254 a poté zkopírovali vzorec dolů do sloupce. U skriptu se nemusíte starat o to, zda jste vzorec správně aplikovali na všechny hodnoty ve sloupci.

Nyní se podívejte na své sněhová data objekt na kartě Prostředí. Mělo by to mít třetí proměnnou, Měřiče.

Protože sněhová data je datový rámec, má určité vlastnosti datového rámce, ke kterým máte přístup z příkazového řádku. nrow (snowdata) vám dává počet řádků a ncol (snowdata) počet sloupců. Ano, můžete to zobrazit v prostředí RStudio, abyste zjistili, kolik pozorování a proměnných existuje, ale pravděpodobně nastanou chvíle, kdy to budete chtít vědět jako součást skriptu. colnames (snowdata) nebo jména (snowdata) vám dá jméno sněhová data sloupce. názvy řádků (snowdata) dá vám jakýkoli název řádku (pokud žádný nebyl nastaven, bude výchozí znakové řetězce čísla řádku, například "1", "2", "3", atd.).

Některé z těchto speciálních funkcí datového rámce, známé také jako metody, nejen že vám poskytne informace, ale umožní vám změnit vlastnosti datového rámce. Tak, jména (snowdata) řekne vám názvy sloupců v datovém rámci, ale

jména (snowdata) <- c ("Winter", "SnowInches", "SnowMeters")

Změny názvy sloupců v datovém rámci.

Pravděpodobně nebudete muset znát všechny dostupné metody pro objekt datového rámce, ale pokud vás zajímá, metody (class = class (snowdata)) zobrazí je. Chcete-li se dozvědět více o jakékoli metodě, spusťte obvyklý dotaz nápovědy s otazníkem, například ?spojit nebo ?podmnožina.

Když číslo ve skutečnosti není číslo

PSČ jsou dobrým příkladem „čísel“, s nimiž by se tak skutečně nemělo zacházet. Ačkoli je to technicky číselné, nemá smysl dělat věci, jako je přidání dvou PSČ společně nebo průměrný počet PSČ v komunitě. Pokud importujete sloupec PSČ, R ​​jej pravděpodobně změní na sloupec čísel. A pokud máte co do činění s oblastmi v Nové Anglii, kde PSČ začínají 0, 0 zmizí.

Mám tabelem definovaný soubor bostonských poštovních směrovacích čísel podle sousedství, stažený z vládní agentury v Massachusetts na adrese //raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt. Pokud jsem to zkusil importovat pomocí zipy <- rio :: import ("bostonzips.txt"), PSČ přijdou jako 2118, 2119 atd., nikoli 02118, 02119 atd.

To je místo, kde to pomůže vědět něco o základní funkci, která rio je import() funkce používá. Tyto základní funkce najdete přečtením import soubor nápovědy na ?import. Pro stahování souborů oddělených tabulátory import používá buď fread () z balíčku data.table nebo base R. read.table () funkce. The číst tabulku help říká, že můžete určit třídy sloupců pomocí colClasses argument.

Vytvořte datový podadresář ve svém aktuálním adresáři projektu a poté stáhněte soubor bostonzips.txt pomocí

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

Pokud importujete tento soubor se specifikací obou sloupců jako řetězců znaků, PSČ přijdou ve správném formátu:

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

Všimněte si, že třídy sloupců musí být nastaveny pomocí C() funkce, c ("znak", "znak"). Pokud jste to zkusili colClasses, "znak", zobrazí se chybová zpráva. Toto je typická chyba pro R začátečníky, ale nemělo by to trvat dlouho, než se do toho pustíme C() zvyk.

Tip, jak ušetřit sami sebe: Psaní c ("znak", "znak") není tak náročný; ale pokud máte tabulku se 16 sloupci, kde prvních 14 musí být znakové řetězce, může to být nepříjemné. R. rep () funkce může pomoci. rep (), jak jste možná uhodli, opakuje jakoukoli položku, kterou jí zadáte, ale mnohokrát jí to řeknete pomocí formátu rep (myitem, numtimes). zástupce („znak“, 2) je stejné jako c ("znak", "znak"), tak colClasses = rep ("znak", 2) je ekvivalentní k colClasses = c ("znak", "znak") . A, colClasses = c (rep ("znak", 14), rep ("numerický", 2)) nastaví prvních 14 sloupců jako řetězce znaků a poslední dva jako čísla. Všechny názvy tříd sloupců zde musí být v uvozovkách, protože názvy jsou řetězce znaků.

Navrhuji, abyste si trochu pohráli rep () takže si zvyknete na formát, protože jde o syntaxi, kterou používají i ostatní funkce R.

Snadné ukázkové údaje

R přichází s některými integrovanými datovými sadami, které se snadno používají, pokud si chcete pohrát s novými funkcemi nebo jinými programovacími technikami. Hodně je využívají také lidé, kteří učí R, protože instruktoři si mohou být jisti, že všichni studenti začínají se stejnými daty ve přesně stejném formátu.

Typ data() zobrazit dostupné předdefinované datové sady v základním R a jakékoli nainstalované balíčky jsou aktuálně načteny. data (package = .packages (all.available = TRUE)) from base R zobrazuje všechny možné datové sady z balíčků, které jsou nainstalovány ve vašem systému, bez ohledu na to, zda jsou načteny do paměti ve vaší aktuální pracovní relaci.

Další informace o datové sadě můžete získat stejným způsobem, jakým získáte nápovědu k funkcím: ? název datové sady nebo help ("název datové sady"). mtcars a iris jsou mezi těmi, které jsem viděl velmi často používán.

Pokud píšete mtcars, vytiskne se v konzole celá sada dat mtcars. Můžete použít hlava() funkce se podívat na prvních pár řádků s hlava (mtcars).

Tuto datovou sadu můžete uložit do jiné proměnné, pokud chcete, ve formátu jako cardata <- mtcars.

Nebo spuštění datové funkce s názvem datové sady, například data (mtcars), načte datovou sadu do vašeho pracovního prostředí.

Jedním z nejzajímavějších balíčků se ukázkovými soubory dat pro novináře je balíček fivethirtyeight, který obsahuje data z příběhů publikovaných na webových stránkách FiveThirtyEight.com. Balíček byl vytvořen několika akademickými pracovníky po konzultaci s redaktory FiveThirtyEight; je koncipován jako zdroj pro výuku vysokoškolské statistiky.

Předem zabalená data mohou být užitečná - a v některých případech zábavná. Ve skutečném světě však možná nepoužíváte data, která jsou tak pohodlně zabalená.

Vytvořte datový rámec ručně v R.

Je pravděpodobné, že se často budete zabývat daty, která začínají mimo R a importujete z tabulky, souboru CSV, API nebo jiného zdroje. Ale někdy možná budete chtít zadat malé množství dat přímo do R, nebo jinak vytvořit datový rámec ručně. Pojďme se tedy rychle podívat na to, jak to funguje.

R datové rámce jsou standardně sestaveny sloupec po sloupci, ne jeden řádek včas. Pokud jste chtěli sestavit rychlý datový rámec výsledků voleb do města, můžete vytvořit vektor jmen kandidátů, druhý vektor s jejich stranickou příslušností a poté vektor jejich součtu hlasů:

kandidáti <- c ("Smith", "Jones", "zápisy", "mezery")

strana <- c ("demokrat", "republikán", "", "")

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

Nezapomeňte ve svých číslech nepoužívat čárky, jako byste to mohli dělat v Excelu.

Chcete-li z těchto sloupců vytvořit datový rámec, použijte data.frame () funkce a synatx data.frame (sloupec1, sloupec2, sloupec3).

myresults <- data.frame (kandidáti, strana, hlasy)

Zkontrolujte jeho strukturu pomocí str ():

str (výsledky)

Zatímco kandidáti a strana vektory jsou postavy, kandidáti a strana sloupce datového rámce se změnily na třídu R objektů zvaných faktory. V tomto okamžiku je to trochu příliš velké na to, abychom se ponořili do toho, jak se faktory liší od postav, kromě toho, že

  1. Faktory mohou být užitečné, pokud chcete objednávat položky určitým, neabecedním způsobem pro vytváření grafů a jiné účely, například Chudý je méně než Veletrh je méně než Dobrý je méně než Vynikající.
  2. Faktory se někdy mohou chovat jinak, než byste čekali. Doporučuji držet se znakových řetězců, pokud nemáte dobrý důvod konkrétně chtít faktory.

Při vytváření datových rámců můžete své řetězce znaků zachovat nedotčené přidáním argumentu stringsAsFactors = FALSE:

myresults <- data.frame (kandidáti, strana, hlasy, stringsAsFactors = FALSE) str (myresults)

Nyní jsou hodnoty takové, jaké jste očekávali.

Při vytváření datových rámců tímto způsobem vás musím varovat ještě jednou: Pokud je jeden sloupec kratší než ostatní, R bude někdy opakovat data z kratšího sloupce—ať už chcete nebo ne.

Řekněme například, že jste vytvořili sloupce s výsledky voleb pro kandidáty a stranu, ale zadali jste pouze výsledky hlasů pro Smitha a Jonese, nikoli pro zápisy a prázdné pozice. Můžete očekávat, že datový rámec zobrazí další dvě položky jako prázdné, ale mýlil by ses. Zkuste to a uvidíte vytvořením nového vektoru hlasů pouze se dvěma čísly a použitím tohoto nového vektoru hlasů k vytvoření dalšího datového rámce:

hlasy <- c (15248, 16723)

myresults2 <- data.frame (kandidáti, strana, hlasy)

str (myresults2)

To je pravda, R znovu použil první dvě čísla, což je rozhodně ne co byste chtěli. Pokud to zkusíte se třemi čísly ve vektoru hlasů místo dvou nebo čtyř, R by vyhodilo chybu. Je to proto, že každý záznam nemohl být recyklován stejně často.

Pokud si teď myslíte: „Proč nemohu vytvořit datové rámce, které automaticky nezmění řetězce na faktory? A proč se musím starat o to, aby datové rámce znovu použily data jednoho sloupce, když zapomenu vyplnit všechna data? “ Stejnou myšlenku měl i Hadley Wickham. Jeho balíček tibble vytváří třídu R, která se také nazývá tibble, což podle něj představuje „moderní pohled na datové rámce. Zachovávají funkce, které obstály ve zkoušce času, a upustí od funkcí, které dříve byly pohodlné, ale nyní jsou frustrující. “

Pokud vás to láká, nainstalujte balíček tibble, pokud není ve vašem systému, a poté zkuste vytvořit tibble pomocí

myresults3 <- tibble :: tibble (kandidáti, strana, hlasy)

a zobrazí se chybová zpráva, že sloupec hlasů musí mít délku 4 nebo 4 položky (tibble () opakuje jednu položku tolikrát, kolikrát je potřeba, ale pouze pro jednu položku).

Pokud chcete vytvořit tibble s těmito údaji, vraťte sloupec hlasů zpět na čtyři položky:

knihovna (tibble)

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

myresults3 <- tibble (kandidáti, strana, hlasy)

str (myresults3)

Vypadá podobně jako datový rámec - ve skutečnosti je datový rámec, ale s některými speciálními chováními, například s tím, jak se tiskne. Všimněte si také, že sloupec kandidátů je znakové řetězce, nikoli faktory.

Pokud se vám toto chování líbí, pokračujte a použijte tibbles. Avšak vzhledem k tomu, jak v R zůstávají běžné konvenční datové rámce, je stále důležité vědět o jejich výchozím chování.

Export dat

Často poté, co jste svrhli svá data v R, chcete uložit své výsledky. Zde jsou některé ze způsobů, jak exportovat vaše data, které používám nejčastěji:

Uložit do souboru CSV s rio :: export (myObjectName, file = "myFileName.csv") a do souboru Excel pomocí rio :: export (myObjectName, file = "myFileName.xlsx"). rio chápe, jaký formát souboru chcete, na základě přípony názvu souboru. Existuje několik dalších dostupných formátů, včetně .tsv pro data oddělená tabulátory, .json pro JSON a .xml pro XML.

Uložit do binárního objektu R. což usnadňuje načtení zpět do R v budoucích relacích. Existují dvě možnosti.

Obecný Uložit() uloží jeden nebo více objektů do souboru, například save (objectName1, objectName2, file = "myfilename.RData"). Chcete-li tato data načíst zpět do R, stačí použít příkaz načíst ("myfilename.RData") a všechny objekty se vracejí se stejnými jmény ve stejném stavu, v jakém byly dříve.

Můžete také uložit jeden objekt do souboru pomocí saveRDS (myobject, file = "filename.rds"). Logickým předpokladem je, že loadRDS by přečetl soubor zpět, ale místo toho je příkaz readRDS—A v tomto případě byla uložena pouze data, ne název objektu. Musíte tedy načíst data do nového názvu objektu, například mydata <- readRDS ("název_souboru.rds").

Existuje třetí způsob uložení objektu R speciálně pro R: generování příkazů R, které by místo objektu s konečnými výsledky znovu vytvořily objekt. Základní funkce R pro generování souboru R k opětovnému vytvoření objektu jsou dput () nebo výpis (). Zjistil jsem však rio :: export (myobject, "mysavedfile.R") ještě snáze zapamatovatelné.

Nakonec existují další způsoby, jak ukládat soubory optimalizované pro čitelnost, rychlost nebo kompresi, které zmiňuji v části o dalších zdrojích na konci tohoto článku.

Objekt R můžete také exportovat do schránky Windows nebo Mac pomocí aplikace rio: rio :: export (myObjectName, formát). Stejným způsobem můžete importovat data do R ze schránky: rio :: import (soubor).

Bonus: rio's konvertovat() Funkce vám umožní - uhodli jste - převést jeden typ souboru na jiný, aniž byste museli data ručně stahovat do a poté z R. Viz ?konvertovat pro více informací.

Závěrečný bod: RStudio vám umožňuje kliknout na import souboru, aniž byste museli psát kód vůbec. To není něco, co doporučuji, dokud nebudete spokojeni s importem z příkazového řádku, protože si myslím, že je důležité porozumět kódu, který je za importem. Ale připouštím, že to může být užitečná zkratka.

Na kartě Soubory v pravém dolním podokně programu RStudio přejděte na soubor, který chcete importovat, a klikněte na něj. Zobrazí se možnost Zobrazit soubor nebo Importovat datovou sadu. Chcete-li zobrazit dialogové okno s náhledy dat, zvolte možnost importu dat a zobrazte náhled kódu, který bude vygenerován, zvolte Import datové sady.

Proveďte jakékoli změny, které chcete, a klikněte na Importovat, a vaše data budou stažena do R.

Dodatečné zdroje

rio alternativy. I když je rio skvělým švýcarským nožem na zacházení se soubory, může nastat situace, kdy budete chtít trochu větší kontrolu nad tím, jak jsou vaše data stažena nebo uložena z R. Kromě toho byly chvíle, kdy jsem měl náročné datový soubor, který rio udusilo, ale jiný balíček to zvládl. Některé další funkce a balíčky, které možná budete chtít prozkoumat:

  • Base R. read.csv () a read.table () importovat textové soubory (použijte ? read.csv a číst tabulku získat více informací). stringsAsFactors = FALSE s nimi je potřeba, pokud si chcete ponechat své řetězce znaků jako řetězce znaků. write.csv () ukládá do CSV.
  • rio používá ke čtení souborů Excel balíček readxl Hadleyho Wickhama. Další alternativou pro Excel je openxlsx, který dokáže zapisovat do souboru Excel i číst jeden. Podívejte se na vignety balíčku openxlsx, kde najdete informace o formátování tabulek při exportu.
  • Balíček readrů Wickham také stojí za pohled jako součást „uklizeného“. readr zahrnuje funkce pro čtení CSV, oddělené tabulátory, pevné šířky, webové protokoly a několik dalších typů souborů. readr vytiskne typ dat, který určil pro každý sloupec - celé číslo, znak, dvojité číslo (ne celá čísla) atd. Vytvoří tibble.

Importujte přímo z tabulky Google. Balíček googlesheets vám umožní importovat data z tabulky Tabulek Google, i když je soukromá, ověřením vašeho účtu Google. Balíček je k dispozici na CRAN; nainstalujte jej přesinstall.packages ("googlesheets"). Po načtení knihovna ("googlesheets"), přečtěte si vynikající úvodní vinětu. V době psaní tohoto článku byla úvodní viněta k dispozici v jazyce R na adrese viněta ("basic-usage", balíček = "googlesheets"). Pokud to nevidíte, zkuste to help (balíček = "googlesheets") a kliknutím na odkaz Uživatelské příručky, Viněty na balení a další dokumentaci zobrazíte dostupné viněty, nebo se podívejte na informace o balíčku na GitHubu na adrese //github.com/jennybc/googlesheets.

Odebrat data z webových stránek s balíčkem rvest a rozšířením prohlížeče SelectorGadget nebo záložkou JavaScript. SelectorGadget vám pomůže objevit prvky CSS dat, která chcete kopírovat a které jsou na stránce HTML; pak rvest používá R k vyhledání a uložení těchto dat. Toto není technika pro surové začátečníky, ale jakmile máte za sebou nějaké zkušenosti s R, možná se budete chtít vrátit a znovu to navštívit. Mám nějaké pokyny a video o tom, jak to udělat na //bit.ly/Rscraping. RStudio má na požádání k dispozici také webinář.

Alternativy k základním funkcím ukládání a čtení základny R. Pokud pracujete s velkými datovými sadami, může být pro vás při ukládání a načítání souborů důležitá rychlost. Balíček data.table je rychlý fread () funkce, ale mějte na paměti, že výslednými objekty jsou datové tabulky a ne prosté datové rámce; některá chování se liší. Pokud chcete konvenční datový rámec, můžete jej získat pomocí as.data.frame (mydatatable) syntax. Balíček datové tabulky fwrite () Funkce je zaměřena na zápis do souboru CSV podstatně rychleji než základní R write.csv ().

Pro ukládání a načítání dat mohou být zajímavé dva další balíčky. Balíček peří se ukládá v binárním formátu, který lze číst buď do R, nebo Pythonu. A první balíček read.fst () a write.fst () nabízejí rychlé ukládání a načítání objektů R datových rámců - plus možnost komprese souborů.