8.1 csv

CSV staat voor Comma-Separated Values. CSV is in feite een tekst-format. Je kan het gewoon lezen in een teksteditor zoals kladblok. Net als in een spreadsheet is de data (kan ook tekst zijn!) gerangschikt in kolommen.

8.1.1 layout

Maar, omdat het een platte tekst is, heb je tekst nodig om de kolommen te scheiden. In Engelstalige csv-bestanden is dat meestal een komma, voor Nederlandstalige is dat natuurlijk onhandig als je met komma werkt als decimaalteken. Daarom hebben we bij Nederlandse csv-bestanden vaak een puntkomma (;) als separator. Ook zie je af en toe een tab als separator.

Daarnaast heb je de mogelijkheid om values waarin een separator zit (bijv. een puntkomma) te bekaderen met bijv. “. Hierdoor weet je dat die ; geen separator is, maar onderdeel van de waarde in de cel.

Zoals je ziet, is er dus veel variatie mogelijk. Belangrijk bij het importeren is om helder te hebben wat de separator is en wat het decimaalteken is, en eventueel wat celwaardes bekadert indien nodig.

8.1.2 Functies om csv te lezen

R heeft een aantal basisfuncties om csv-bestanden te lezen, maar ik raad aan om de functies uit de package Tidyverse te gebruiken (deze zijn vaak net iets sneller bij grotere bestanden, en meestal gebruik je toch ook functies uit deze packages voor vervolgstappen).

De meest veelzijdige functie om csv-bestanden, en tekstbestanden in het algemeen, te openen is read_delim(). Hierin kan je alles wat nodig is aanpassen. Standaardinstelling voor deze functie is dat de separator een tab is.

Meer algemeen, en vaak gemakkelijker, is om de functie read_csv2() te gebruiken. Deze heeft standaard ingesteld om ; als separator en , als decimaalteken te gebruiken.

Heb je een Engelse variant, gebruik dan read_csv(). Natuurlijk kan je in de functies vanalles aanpassen.

Heb je de juiste format, dan is het heel simpel:

df <- read_csv2("filename")

Waarbij je bij filename natuurlijk het pad naar het gewenste bestand weergeeft.

8.1.3 Nog meer variatie mogelijk

Standaard gaan voorgaande functies ervan uit dat de bovenste regels de titels van de kolommen bevat. Is dat niet zo, dan kan je dat aangeven met het argument col_names = FALSE.

Verder staat de functie standaard zo ingesteld dat lege ruimte rondom de value (bijv. spaties) wordt weggehaalde (trimmed). Dat kan je aanpassen met het argument trim_ws = FALSE.

Het kan ook zijn dat de eerste regels andere data bevatten (bijv. metadata over het bestand). Dan kan je met argument skip = x bepalen tot welke regel overgeslagen wordt (met x de laatste regel die je wilt overslaan).

Er zijn nog veel meer opties, die vind je door ?read_csv uit te voeren.