1 (a) Luetaan tiedosto mittaus.csv R ohjelmiston käytettäväksi.

library(readr)
mittaus = read.csv("mittaus.csv")
#toteutetaan simppelillä read.csv komennolla readr kirjastosta, ei sen kummempaa

Poimitaan seuraavaksi aineistosta opintosuunta sarake, ja muotoillaan uusidataframe niminen dataframe, joka on mittaus aineeiston osajoukko, josta poistetaan biologiaa opiskelevat vastaajat, ja faktoroidaaan valmiksi sukupuoli sarake.

opintosuunta <- mittaus$opintosuunta
uusidataframe <- subset(mittaus, opintosuunta != "BIOL")
factorsp <- factor(uusidataframe$sukupuoli)

Muokataan vielä niin, että saamme sisällytettyä myös faktoroidut sukupuolen arvot tibble-muotoisessa esityksessä:

dataframelop <- data.frame(uusidataframe, factorsp)

#nyt tibble muodossa:
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ purrr     1.0.2
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
datatibble <- tibble::as_tibble(dataframelop);datatibble
## # A tibble: 61 × 5
##    sukupuoli opintosuunta kunnat_kartalle reaktioaika_2 factorsp
##        <int> <chr>                  <dbl>         <int> <fct>   
##  1         2 BIOK                   1609.           325 2       
##  2         2 MAAN                   2743.            NA 2       
##  3         1 MAAN                   2139.           633 1       
##  4         1 BIOK                   1444.           446 1       
##  5         1 MAAN                   1330.           447 1       
##  6         2 MAAN                   1574.           479 2       
##  7         2 BIOK                   2283.           440 2       
##  8         2 MAAN                   2468.           438 2       
##  9         2 MAAN                   4036.           466 2       
## 10         1 MAAN                    324.           399 1       
## # ℹ 51 more rows

1 (b) Sirontakuvio kunnat_kartalle ja reaktioaika_2

Nyt meidän tulee muodostaa (a) kohdan data.framesta sirontakuviot muuttujille kunnat_kartalle, ja reaktioaika_2, värjäten arvot sirontakuvioon opintosuunnan mukaan.

#kutsutaan tarvittava kirjasto meidän käyttöön. Toteutus ggplot2 kirjaston geom_point komennolla.

library(ggplot2)
sirontakuvio1 <- ggplot(data = dataframelop) + geom_point(mapping = aes(x = kunnat_kartalle, y = reaktioaika_2, color = opintosuunta)) +
  labs(x = "virhe kilometrit Kunnat kartalle pelissä, jossa tulee sijoittaa 10 arvottua kuntaa Suomen kartalle", y= "vastaajan reaktioaika millisekunteina")
sirontakuvio1
## Warning: Removed 1 rows containing missing values (`geom_point()`).

1 (c) Biokemian ja maantieteen opiskelijoiden virhekilometrit Kunnat kartalle -pelissä.

Nyt meidän tulee laskea R-ohjelmistolla sekä biokemian- että maantieteen opiskelijoiden virhekilometrit Kunnat kartalle-pelissä. Toteutetaan tämä poimimalla dataframesta muuttujat erikseen, ja laskemalla sum() komennolla yhteen kaikki arvot:

MAANDATA <- subset(dataframelop, opintosuunta == "MAAN")
BIOKDATA <- subset(dataframelop, opintosuunta == "BIOK")

MAANVIRHSum <- sum(MAANDATA$kunnat_kartalle) ;MAANVIRHSum
## [1] 60505.5
BIOKVIRHSum <- sum(BIOKDATA$kunnat_kartalle) ; BIOKVIRHSum
## [1] 54138.5
Virhekilometrit <- data.frame(MAANVIRHSum, BIOKVIRHSum);Virhekilometrit
##   MAANVIRHSum BIOKVIRHSum
## 1     60505.5     54138.5

2. (a) Pakettihinta_funktion muodostaminen

Meidän täytyy muodostaa tässä tehtävässä pakettihinta funktio, joka laskee kuljetushinnan paketin koon ja painon mukaan, tehdään näistä näin pääsijaiset argumentit, koko ja paino.

Pakettihinta_funktio <- function(koko, paino) {

#Määritellään aluksi hinta yksittäisille kokoluokille, S, M ja L pakettikokojen hinnat on tiedossa (6, 10 ja 13) vastaavasti.
  
Koon_hinta <- list(S = 6, M = 10, L = 13)
  
  # Muodostetaan tarkistuskomento, joka tarkistaa, että syötetty pakettikoko löytyy aikaisemmin määritellystä listasta.
  if (!(koko %in% names(Koon_hinta))) {
    print("Virheellinen pakettikoko, valitse jokin hyväksyttävistä syötteistä S, M tai L")
    return(0)
  }
  # jos aikaisemmasta tarkistuksestä päästään läpi, laskemme paketille perushinnan, jossa ei vielä oteta huomioon paketin painoa lainkaan.

perushinta <- Koon_hinta[[koko]]

#Painoraja yhdelle paketille on 15kg, jonka jälkeen ylipainosta maksetaan 0.5€ per kg ylimenevältä osalta 
Painoraja <- 15
Ylipainon_hinta <- 0
  
  if (paino > Painoraja) {
    Ylipaino <- paino - Painoraja
    Ylipainon_hinta <- Ylipaino * 0.5
  }
  
Kuljetushinta <- perushinta + Ylipainon_hinta
cat("Paketti maksaa", Kuljetushinta, "euroa\n")
return(Kuljetushinta)
}

Muutama testikierros, jotta voimme varmistua toimivuudesta:

Pakettien_kokoja1 <- "S"
Pakettien_painoja1 <- 15
testi1 <- Pakettihinta_funktio(Pakettien_kokoja1, Pakettien_painoja1);testi1
## Paketti maksaa 6 euroa
## [1] 6
Pakettien_kokoja2 <- "M"
Pakettien_painoja2 <- 17
testi2 <- Pakettihinta_funktio(Pakettien_kokoja2, Pakettien_painoja2);testi2
## Paketti maksaa 11 euroa
## [1] 11
Pakettien_kokoja3 <- "X"
Pakettien_painoja3 <- 20
testi3 <- Pakettihinta_funktio(Pakettien_kokoja3, Pakettien_painoja3)
## [1] "Virheellinen pakettikoko, valitse jokin hyväksyttävistä syötteistä S, M tai L"