8 Puutteellista dataa?
Tieteellisten artikkelien Methods-osuudessa useimmiten kuvataan, että ennen analyysejä suljettiin pois kaikki sellaiset tutkittavat, joiden kohdalla oli puuttuvaa dataa jonkun tutkittavan biomarkkerin suhteen.
Harjoitellaan seuraavassa vielä tätä. Luodaan itse pari autoa dplyr:in käskyillä datasettiimme, mutta tehdään tämä niin, että näissä kahdessa autossa on puuttuvaa dataa. (Huom! Sinun ei tarvitse tässä vaiheessa opetella datarivin lisäämistä tai rivin nimen muuttamista seuraavasta koodista - riittää kun kopioit koodit omaan skriptiisi minun_datani.R.)
# 1.
#
# Luodaan auto, jolle ei määritetä massaa.
# Massa saa automaattisesti R:ssä siksi arvon NA (not available eli missing data).
# Tallennetaan koko uusi automobiilisetti datasettiin "automobiilit3":
automobiilit3 <- automobiilit2 %>%
add_row(bensankulutus = 30.7,
hevosvoima = 67,
vaihteisto = 1)
#Annetaan viimeisen rivin (eli auton) nimeksi "Lada":
row.names(automobiilit3)[nrow(automobiilit3)] <- "Лада"
# 2.
#
# Luodaan seuraava auto, joka saa DDR:n historiaa henkivän nimen "Trabant".
# Annetaan massaksi selvästi virheellinen arvo 0 kiloa.
# Tallennetaan koko automobiilisetti datasetin "automobiili3" päälle:
automobiilit3 <- automobiilit3 %>%
add_row(bensankulutus = 34.6,
hevosvoima = 23,
massa = 0,
vaihteisto = 1)
row.names(automobiilit3)[nrow(automobiilit3)] <- "Trabant"
Voit tarkastella luotua dataa jälleen kirjoittamalla konsoliin käskyn:
View(automobiilit3)
Näet autojen listan lopussa kaksi uutta riviä, joilla on puuttuvaa/virheellistä dataa sarakkeessa “massa” (tässä näkyy vain 6 viimeistä riviä):
bensankulutus | hevosvoima | massa | vaihteisto | |
---|---|---|---|---|
Ford Pantera L | 15.8 | 264 | 3.17 | 1 |
Ferrari Dino | 19.7 | 175 | 2.77 | 1 |
Maserati Bora | 15.0 | 335 | 3.57 | 1 |
Volvo 142E | 21.4 | 109 | 2.78 | 1 |
Лада | 30.7 | 67 | NA | 1 |
Trabant | 34.6 | 23 | 0.00 | 1 |
8.1 Puutteellisen datan poisto
Virheellistä dataa voi poistaa seuraavin vaihein:
- vaihe: NA-arvoja (not available) sisältävien rivien poisto
- vaihe: epäadekvaattia dataa sisältävien rivien poisto (esim. massa ei voi olla 0 kg)
Käytännössä vaiheen 2 toteutus vie myös kohdassa yksi mainitut NA-arvoa sisältävät rivit mennessään, kun käytetään dplyr-paketin filter-käskyä, joka tuli jo edellä tutuksi.
Demonstroidaan tämä seuraavilla koodiriveillä (voit kirjoittaa nämä minun_datani.R-skriptiin ja ajaa siinä painamalla Cmd+Enter):
# 1. vaihe:
#
# Näytetään datamme, kun NA'ta sisältäneet rivit on poistettu.
# Huom! Uutta datasettiä ei luoda, sillä emme käske dataa
# operaattorilla <- siirrettäväksi mihinkään uuteen datasettiin.
# Eli seuraava koodi vain ikään kuin näyttää minkälainen datasetti
# meille tulisi, jos ohjaisimme koodin eteenpäin uuteen datasettiin
# käyttämällä operaattoria <- ja antamalla uudelle datasetille jonkun
# nimen, esim. "automobiilit4":
automobiilit3 %>% na.omit
Kuten alla näet (tulostettuna vain 6 viimeistä riviä), NA-arvoa sisältänyt Lada häviäisi, mutta Trabant jäisi jäljelle:
## bensankulutus hevosvoima massa vaihteisto
## Lotus Europa 30.4 113 1.513 1
## Ford Pantera L 15.8 264 3.170 1
## Ferrari Dino 19.7 175 2.770 1
## Maserati Bora 15.0 335 3.570 1
## Volvo 142E 21.4 109 2.780 1
## Trabant 34.6 23 0.000 1
Kokeillaan nyt vaihetta 2 eli poistaa muuttujat, jotka eivät saa jotakin järjellistä arvoa, ja katsotaan miten käy. Huom! Taaskaan emme tallenna tätä ajoa mihinkään uuteen datasettiin, koska emme käytä operaattoria <- piiputettujen käskyjen alussa (tai lopussa). Voit kirjoittaa seuraavat rivit minun_datani.R-skriptiin ja ajaa siinä painamalla Cmd+Enter:
# 2. vaihe:
#
# Säilytetään vain autot, joiden muuttujat saavat "sallittuja", järjellisiä arvoja.
# Jälleen: emme tee uutta datasettiä vaan ainoastaan demonstroimme minkälainen datasetti
# tulisi, jos loisimme tässä uuden datasetin.
automobiilit3 %>%
filter(bensankulutus > 0,
hevosvoima > 0,
massa > 0,
vaihteisto %in% c(0,1))
Huomaat, että vaiheen 2 käsky vie suoraan sekä NA’ta sisältäneen Ladan että “nollamassan” sisältäneen Trabantin mennessään (tässä alla näytettynä vain 4 viimeistä riviä tulosteesta):
## bensankulutus hevosvoima massa vaihteisto
## Ford Pantera L 15.8 264 3.17 1
## Ferrari Dino 19.7 175 2.77 1
## Maserati Bora 15.0 335 3.57 1
## Volvo 142E 21.4 109 2.78 1
Jos ja kun käytämme dplyr:n filter-komentoa, strategiamme on:
- Valitsemme yltä suoraan vaiheen 2 filter-käskyn, joka poistaa sekä NA:t että “nollamassat”
Luodaan samalla uusi, vain adekvaattia dataa sisältävä datasetti “automobiilit4”. Kirjoita seuraavat rivit minun_datani.R-skriptiin ja aja siinä painamalla Cmd+Enter:
# Poistetaan rivit joilla epäadekvaattia dataa tai NA:ta.
# Tallennetaan tällainen koko automobiilisetti
# uuteen datasettiin "automobiilit4":
automobiilit4 <- automobiilit3 %>%
filter(bensankulutus > 0,
hevosvoima > 0,
massa > 0,
vaihteisto %in% c(0,1))
Kun tarkastelet datasettiä kirjoittamalla konsoliin käskyn View(automobiilit4)
huomaat, että datasetti on nyt siistitty puuttuvasta/virheellisestä datasta (alla näkyy vain 4 viimeistä riviä):
bensankulutus | hevosvoima | massa | vaihteisto | |
---|---|---|---|---|
Ford Pantera L | 15.8 | 264 | 3.17 | 1 |
Ferrari Dino | 19.7 | 175 | 2.77 | 1 |
Maserati Bora | 15.0 | 335 | 3.57 | 1 |
Volvo 142E | 21.4 | 109 | 2.78 | 1 |
R-opas by Ville Langén is licensed under Attribution-ShareAlike 4.0 International