Ulkoisen tiedoston lukeminen aineistoksi

Suuremmat aineistot luetaan yleensä R:ään ulkoisista tiedostoista. Paketissa foreign on funktioita eräiden tilasto-ohjelmien tiedostojen lukemiseksi R:ään. Usein on kuitenkin varminta käyttää read.table -funktiota. R pystyy varmuudella lukemaan ascii-tiedostoja, eli sellaisia tiedostoja, joissa on vain tavallisia näkyviä merkkejä. Yksittäisten arvojen on oltava jollain tavoin erotettuja: esimerkiksi tyhjä väli on kelvollinen. Funktio read.table hyväksyy monenlaisia erottimia, mutta saattaa olla tarpeen ilmoittaa funktiolle käytetty erotin (sep). Muuttujien ja havaintojen nimet voidaan myös lukea tiedostosta.

Funktion read.table toiminta tuntuu vaihtelevan hieman R-versioissa, mutta ainakin joissan versioissa tarjolla on seuraavat vaihtoehdot tiedoston lukemiseksi:

Sekä muuttujien että havaintojen nimet pystyy antamaan tai muuttamaan myös myöhemmin (colnames, rownames).

Usein aineisto on peräisin jostain taulukkolaskentaohjelmasta, esim. Excelistä. Taulukkolaskentaohjelmien yksityisiä formaatteja R ei pysty lukemaan (ainakaan kaikilla alustoilla). Tällainen tiedosto on ensin muutettava johonkin yllä mainituista taulukkotyypeistä. Taulukkolaskentaohjelmien csv (``Comma Separated Values'') eli pilkkujen erottamat arvot on käyttökelpoinen tallennusmuoto. Csv-formaattia varten R:ssä on kaksi read.table -funktion varianttia: read.csv ja read.csv2. Jälkimmäinen on tarkoitettu suomalaisilla asetuksilla toimiville ohjelmille, jotka käyttävät desimaalierottimena pilkkua normaalin pisteen sijaan ja vastaavasti lukujen erottimena puolipistettä pilkun sijaan.

Taulukkolaskentatiedostoja talletettaessa on syytä tarkastaa tiedosto huolellisesti. R:ää varten on talletettava vain varsinainen taulukko, ei erilaisia lisälaskelmia ja kuvia. Erityisen huolellisesti on tarkastettava, että muuttujien ja havaintojen nimet noudattavat R:n sääntöjä: ei välilyöntejä, alaviivoja ja varmuuden vuoksi ei myöskään ääkkösiä. Sanat on siis kirjoitettava yhteen ja tarpeen vaatiessa käytettävä nimissä pistettä välien tai alaviivojen sijaan. Merkkilajisokeiden käyttöjärjestelmien (Windows) ja merkkilajiherkän R:n yhteistoiminta voi myös vaatia huomiota.

Tiedostoissa voi olla myös puuttuvia tietoja. Lukukomennoille voi ilmoittaa puuttuvista tiedoista käytetyn symbolin (na.string=). Mikäli erottimena käytetään jotain muuta merkkiä kuin tyhjää (esim. read.csv), tyhjät kentät voidaan lukea suoraan puuttuviksi tiedoiksi. Ainakin Excelin käyttäjillä on usein tapana jättää nollat kirjoittamatta jolloin R saattaa tulkita ne puuttuviksi tiedoiksi. Olen tosin useammin kuin harvoin nähnyt, että käyttäjät tekevät tämän virheen huomaamattaan jo Excelissä. Tyhjät kentät voi tulkita myös nolliksi tai muuttaa ne myöhemmin nolliksi

> x[is.na(x)] <- 0

mutta tällöin olisi parasta että kaikki muuttujan samoin koodatut kentät ovat joko nollia tai puuttuvia tietoja.

Mikäli kaikki muuttujan arvot ovat R:n mielestä numeerisia, muuttuja tulkitaan numeeriseksi. Mikäli R on mielestään löytänyt muuttujasta yhdenkin ei-numeerisen arvon, muuttuja tulkitaan faktoriksi. Jos siis numeeriseksi kuviteltu muuttuja onkin R:n mielestä faktori, on syytä tarkistaa tiedosto ja komentonsa. Muuan helpoimmista tavoista tarkistaa aineiston lukeminen on komento

> str(aineisto)

joka tulostaa kunkin muuttujan ensimmäiset havainnot ja näyttää tyypin. R:ään pystyy lukemaan myös tekstimuuttujia faktoreiksi. Tosin monet taulukkolaskentaohjelmat (Excel) eivät pysty itse käsittelemään merkkimuuttujia kovinkaan hyvin, joten faktoritkin on usein epäinformatiivisesti koodattu numeroiksi. Kannattaa vakavasti harkita tällaisten muuttujien koodaamista selväkielisiksi nimiksi. Tavallinen syy numeerisen muuttujan ``faktoristumiseen'' on, että muuttujassa oli puuttuvia tietoja, joita ei ollut asiallisesti koodattu. Parametri as.is voi auttaa tällaisten tilanteiden hallinnassa.

Aineiston lukemisen jälkeen on vielä mahdollista muuttaa muuttujien tyyppiä. R:ssä on koko joukko as.xxx -muunnosfunktioita, missä xxx on jokin R:n lukuisista tyypeistä. Alkujaan numeroina koodattu ja numeeriseksi tulkittu faktori voidaan todella muuttaa faktoriksi myös suoralla komennolla:

> aineisto$a <- factor(aineisto$a, levels=c(...))

Parametrilla levels voi luetella faktorin tasot, jolloin ne tulevat käyttäjän haluamaan järjestykseen R:n suosiman sijaan. Pysyvien muutosten aikaan saamiseksi on usein käytettävä tätä pitempää luettelotyyppistä muotoa muuttujasta a vaikka aineisto olisi liitetty (attach) R:ään, sillä muuten muuttuu vain paikallinen kopio aineistosta (sama koskee tietysti puuttuvien tietojen korvaamista yllä).


Jari Oksanen 2003-01-21