Basisvaardigheden in R: Gegevens binnen en buiten R krijgen
Data in- en uitvoer: invoer via toetsenbord of R Data Import Wizard
Inleiding tot in- en uitvoer van gegevens Zou wetenschap iets zijn zonder dat mensen op elkaars kennis en data voortbouwen? Waarschijnlijk niet. Het delen en ontvangen van gegevens helpt wetenschappers samen te werken of voort te bouwen op het werk van anderen. Het is dus belangrijk om gegevens in en uit R te krijgen.
Op de komende theoriepagina's zullen we beschrijven
- hoe gegevensbestanden in R kunnen worden geïmporteerd (voornamelijk tekstbestanden, Excel-bestanden of csv bestanden);
- hoe u gegevensframes exporteert (als R-bestand, Excel-bestand of csv bestand).
We zullen invoer en uitvoer van data op een MS Windows computer illustreren en altijd veronderstellen dat de werkmap gelijk is aan C:\temp. In- en uitvoer van data gaat op een macOS computer op vergelijkbare wijze. We bespreken slechts een heel klein deel van alle data import/export functionaliteit die R biedt; de ultieme, maar minder leesbare gids voor het importeren van gegevens in R is de R Data Import/Export Manual die beschikbaar is op https://cran.r-project.org/doc/manuals/R-data.pdf. En dit document beschrijft dan nog niet eens wat data science pakketten zoals tidyverse
in dit opzicht te bieden hebben. Onderstaande afbeelding geeft een indruk van de vele manieren waarop gegevens in R kunnen terechtkomen.
Gegevens invoeren via het toetsenbord Gegevens invoeren via het toetsenbord is alleen mogelijk voor kleine datasets. Er zijn twee veel voorkomende methoden:
- gegevens rechtstreeks in code insluiten.
- gegevens invoeren via de ingebouwde teksteditor van R
hond <- c(0,25, 1, 4, 9)
mens <- c(9, 30, 52, 66,5)
leeftijd <- data.frame(hond, mens)
Gegevens invoeren via de ingebouwde teksteditor van R gaat als volgt: de R-functie edit()
roept de teksteditor aan waarmee u gegevens handmatig kunt invoeren. Hier zijn de stappen:
- Maak een leeg dataframe (of matrix) met de namen en datatypes van variabelen die u in de uiteindelijke dataset wilt hebben.
- Roep de teksteditor op voor dit data object, voer je gegevens in en sla de resultaten op in het data object.
Onderstaande voorbeeldsessie illustreert deze werkwijze.
> leeftijd <- data.frame(hond=numeric(), mens=numeric()) > leeftijd <- edit(leeftijd)
De ingebouwde editor van R verschijnt en kan worden ingevuld:
> leeftijd hond mens 1 0.25 9.0 2 1.00 30.0 3 4.00 52.0 4 9.00 66.5
Voor een grotere dataset kan het handiger zijn om gegevens in een spreadsheet programma in te voeren, bijvoorbeeld Excel, en de gegevens in R te krijgen door ze te importeren uit het Excel-bestand of uit het hieruit gegenereerde csv bestand. Dit is wat hierna zal worden besproken.
Maar voordat we dat doen, willen we nog wijzen op de Import Dataset wizard in RStudio. Dit is een eenvoudige manier om gestandaardiseerde datasets te importeren. Maar uiteindelijk is het handig om te weten hoe je gegevens kunt importeren met behulp van R instructies, omdat dit meer flexibiliteit biedt. De laatste methode heeft ook de voorkeur omdat het sneller is en je in staat stelt om je bestanden gemakkelijk opnieuw te importeren bij hergebruik van het script zonder opnieuw op knoppen te hoeven drukken en naar je bestanden te bladeren. Wanneer je echter begint met het importeren van gegevens, kan het gebruik van de knoppen handiger zijn, omdat het je in staat stelt een voorbeeld te zien van hoe de geïmporteerde gegevens eruit zullen zien. Welke methode je ook kiest, het is altijd raadzaam om het bestand dat je wilt importeren op te slaan in de map die je hebt ingesteld als werkmap (zie de theorie pagina Werken met werkmappen in het hoofdstuk Wegwijs worden in de werkomgeving) zodat R en jij ze gemakkelijk kunnen vinden. Hieronder gaan we ervan uit dat je een computer met Windows gebruikt, maar het is vergelijkbaar op een macOS-computer.
Gebruik van de Import Dataset wizard in RStudio Stel dat we een tekstbestand hebben, zeg leeftijd.txt op een MS Windows computer opgeslagen in de folder C:\temp, met de volgende tekstuele inhoud
hond, mens
0.25, 9
1, 30
4, 52
9, 66.5
Selecteer in RStudio in het rolmenu Import Dataset in het Environment/History/Connections paneel (standaard het bovenste rechterpaneel) het item From Text (base) ...", zoek het bestand leeftijd.txt via Windows Verkenner en open het. Het pop-up venster ziet er als volgt uit:
Onder Input File zie je hoe het bestand er in zijn oorspronkelijke staat uitziet (leeftijd.txt). Onder Data Frame zie je hoe R de gegevens zal lezen, aan de linkerkant staan de instellingen. Ze geven al een indruk van waar je bij het importeren van data tegenaan loopt. Hier zie je dat het scheidingsteken is ingesteld op Comma. Dit is juist, want in het invoerbestand zien we dat de waarden inderdaad door een komma worden gescheiden. Het decimaalteken is ingesteld op Point, wat ook juist is voor ons tekstbestand. Als alternatief hadden we puntkomma's of tabbladen kunnen gebruiken om items op elke regel van elkaar te scheiden. We zien ook dat de optie Heading is ingesteld op Yes. Dit betekent dat de eerste regel (rij) wordt gebruikt als de titels (header) voor de kolommen. Dit is vaak handig voor het overzicht en het invoeren van opdrachten later in een sessie of script. Wanneer je op de Import knop klikt, maakt de R Wizard de instructies voor het importeren van de gegevens; in het consolevenster krijg je namelijk de eerste twee van de volgende instructies hiertoe uitgevoerd:
> leeftijd <- read.csv("C:/temp/leeftijd.txt") > View(leeftijd)
> str(leeftijd) # toon de interne structuur van leeftijd 'data.frame': 4 obs. of 2 variables: $ hond: num 0.25 1 4 9 $ mens: num 9 30 52 66.5
Het dataframe leeftijd
is aangemaakt en je kunt de dataset bekijken in het bovenste linkerpaneel. Merk op dat de invoerinstructie de functie read.csv()
gebruikt voor ons bestand met de extensie txt. Dit werkt prima, omdat het tekstbestand bijna hetzelfde formaat heeft als een overeenkomstig csv bestand.
Hetzelfde geldt voor het importeren van Excel-bestanden met de R-wizard. Selecteer hiervoor From Excel.... Hier zie je ook een Import Dataset wizard. Je kunt echter aangeven welk werkblad uit je bestand je wilt importeren, welk bereik van kolommen en rijen, het maximale aantal rijen waarnaar je wilt importeren, welke rijen je wilt overslaan en welke waarde er in de cellen staat waar geen gegevens zijn (meestal leeg of NA). Allemaal opties die van belang zijn bij het importeren van een dataset. Hieronder zie je de Wizard toegepast op het Excel-bestand leeftijd.xlsx dat is opgeslagen in de map C:\temp.
In dit geval wordt de dataset geïmporteerd via de functie read_excel()
uit het pakket readxl
, en de gegevens worden nu opgeslagen in een tibble. Je kunt met tibbles werken op dezelfde manier als met dataframes.
> library(readxl) > leeftijd <- read_excel("C:/temp/leeftijd.xlsx") > View(leeftijd) > str(leeftijd) # toon de datastructuur tibble [4 x 2] (S3: tbl_df/tbl/data.frame) $ hond: num [1:4] 0.25 1 4 9 $ mens: num [1:4] 9 30 52 66.5 > leeftijd # print de inhoud van de datastructuur # A tibble: 4 x 2 hond mens <dbl> <dbl> 1 0.25 9 2 1 30 3 4 52 4 9 66.5 > leeftijd$hond # geobserveerde hondenleeftijden [1] 0.25 1.00 4.00 9.00 > leeftijd$mens # geobserveerde mensenleeftijden [1] 9.0 30.0 52.0 66.5