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
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()`).
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
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"