18  Temų 1–7 kartojimo užduotys

Šiame skyriuje pateikiama po tris užduotis kiekvienai iš pirmųjų septynių temų. Užduotys skirtos savarankiškai pasitikrinti žinias ir pasirengti kontroliniam darbui. Žyma „Kontrolinio tipo“ pažymėtos užduotys savo struktūra panašios į kontrolinio darbo užduotis, tačiau jų duomenys arba reikalavimai pakeisti.

Trumpai pakomentuokite gautus atsakymus. Jei nenurodyta kitaip, užduotį galima spręsti keliais būdais. Sprendimams pakanka standartinių R paketų. Kiekviena užduotis yra savarankiška: jos kodas nepriklauso nuo kitų užduočių.

3 tema. Duomenų struktūros

3.1. Vektorius, matrica ir sąrašas

ExerciseUžduotis

Kontrolinio tipo. Naudokite standartinį rinkinį USArrests.

  1. Sukurkite vektorių iš pirmųjų 12 kintamojo Assault reikšmių. Elementų vardai turi sutapti su atitinkamais lentelės eilučių vardais.
  2. Išveskite šį vektorių be trečiojo ir septintojo elementų.
  3. Visą lentelę paverskite matrica. Išrinkite pirmąsias keturias eilutes ir stulpelius Murder, UrbanPop, išlaikydami matricos struktūrą.
  4. Sukurkite vardinį sąrašą iš pradinės lentelės, viso 12 elementų vektoriaus ir išrinktos matricos. Iš sąrašo išrinkite antrąjį elementą kaip vektorių.

3.2. Sekos ir matricos indeksai

ExerciseUžduotis
  1. Naudodami seq() sukurkite seką nuo 4 iki 48, kurios žingsnis lygus 4.
  2. Iš šios sekos sudarykite 3 × 4 matricą, pildomą eilutėmis. Stulpelius pavadinkite A, B, C, D.
  3. Išrinkite antrosios eilutės elementus ir atskirai paskutinį stulpelį kaip vieno stulpelio matricą.
  4. Pakeiskite pirmosios eilutės trečiąjį elementą į 0. Paaiškinkite, kuo skiriasi m * m ir m %*% t(m).

3.3. Duomenų lentelė ir faktorius

ExerciseUžduotis
  1. Sukurkite lentelę studentai su stulpeliais id = 1:5, grupe = c("B", "A", "B", "A", "B"), balas = c(6, 9, 7, 10, 8).
  2. grupe paverskite faktoriumi su lygių tvarka A, B.
  3. Pridėkite loginį stulpelį islaike, kuris lygus TRUE, kai balas >= 7.
  4. Išrinkite stulpelį balas kaip vektorių ir kaip vieno stulpelio lentelę. Patikrinkite abiejų rezultatų klases.

4 tema. Duomenų importavimas ir eksportavimas

4.1. CSV failo sukūrimas ir nuskaitymas

ExerciseUžduotis
  1. Sukurkite lentelę matavimai su stulpeliais id = 1:4, ilgis = c(12.5, 10.2, NA, 14.8), grupe = c("A", "B", "A", "B").
  2. Darbiniame kataloge išsaugokite ją kaip matavimai.csv: stulpelių skirtukas turi būti kablelis, dešimtainis skirtukas – taškas, eilučių vardų neįrašykite.
  3. Nuskaitykite failą į naują objektą. Patikrinkite matmenis, stulpelių vardus ir praleistos reikšmės vietą.

4.2. Skirtukai ir dešimtainis kablelis

ExerciseUžduotis

Failo turinys pateiktas žemiau. Pirmiausia sukurkite jį nurodytu kodu.

Kodas
writeLines(c("id;kaina;kiekis", "1;12,5;3", "2;8,4;5", "3;NA;2"), "prekes.csv")
  1. Nuskaitykite prekes.csv naudodami read.table(). Pirmoji eilutė yra antraštė, stulpeliai atskirti kabliataškiais, dešimtainis skirtukas – kablelis.
  2. Patikrinkite stulpelio kaina tipą ir praleistų reikšmių skaičių.
  3. Išsaugokite lentelę faile prekes.tsv, kuriame stulpeliai atskirti tabuliacija, o dešimtainis skirtukas yra taškas. Eilučių vardų neįrašykite.

4.3. Vieno objekto išsaugojimas

ExerciseUžduotis
  1. Sukurkite sąrašą rinkinys, turintį elementus duomenys = head(iris, 6) ir pastaba = "Pirmosios šešios eilutės".
  2. Išsaugokite visą sąrašą faile rinkinys.rds.
  3. Nuskaitykite failą į objektą kitu vardu – atkurta. Patikrinkite, ar pradinis ir atkurtas objektai visiškai sutampa.
  4. Paaiškinkite, kodėl vienas CSV failas nėra tiesioginis būdas išsaugoti šį sąrašą su visa jo struktūra.

5 tema. Duomenų filtravimas, rikiavimas ir apjungimas

5.1. Praleistos reikšmės ir atranka

ExerciseUžduotis

Kontrolinio tipo. Naudokite airquality.

  1. Palikite tik eilutes, kuriose nepraleistos abiejų kintamųjų Ozone ir Solar.R reikšmės. Kitų stulpelių NA neturi lemti atrankos.
  2. Nurodykite likusių eilučių skaičių. Pridėkite loginį stulpelį vejuota, kuris lygus TRUE, kai Wind >= 10.
  3. Atrinkite birželio ir liepos stebėjimus, kurių Ozone > 50. Palikite stulpelius Month, Day, Ozone, Wind.
  4. Rezultatą išrikiuokite pagal Ozone mažėjimo tvarka, o sutampant reikšmėms – pagal Wind didėjimo tvarka.

5.2. Pasikartojimai ir reikšmių paieška

ExerciseUžduotis

Duotas vektorius:

Kodas
x <- c(4, NA, 7, 4, 2, 7, 9, NA, 2, 5)
  1. Nustatykite praleistų reikšmių skaičių.
  2. Sudarykite nesikartojančių nepraleistų reikšmių vektorių ir išrikiuokite jį didėjimo tvarka.
  3. Išrinkite skaičius, kurie pradiniame vektoriuje pasirodo bent du kartus. Kiekvieną jų pateikite tik kartą; NA neįtraukite.
  4. Suraskite pradinio vektoriaus pozicijas, kuriose reikšmės priklauso aibei c(2, 5, 9).

5.3. Lentelių jungimas pagal raktą

ExerciseUžduotis
Kodas
studentai <- data.frame(id = c(1, 2, 3, 4), vardas = c("Asta", "Mantas", "Ieva", "Tomas"))
balai <- data.frame(studento_id = c(3, 1, 5), balas = c(9, 8, 10))
  1. Sujunkite lenteles taip, kad liktų tik abiejose lentelėse esantys studentai.
  2. Sujunkite jas taip, kad liktų visi lentelės studentai įrašai.
  3. Atlikite pilną jungimą. Nurodykite kiekvieno iš trijų rezultatų eilučių skaičių.
  4. Paaiškinkite, kodėl jungimas su cbind() pagal eilučių poziciją čia netinka.

6 tema. Programavimo struktūros

6.1. Skaičiavimas ciklu ir sąlyginis pranešimas

ExerciseUžduotis

Kontrolinio tipo. Naudokite vektorių rivers.

  1. Naudodami for ciklą suskaičiuokite upes, kurių ilgis griežtai didesnis nei 800 mylių. Skaitiklį prieš ciklą prilyginkite nuliui.
  2. Naudodami if-else išveskite vieną pranešimą: „Daug ilgų upių“, kai jų bent 20; „Vidutiniškai ilgų upių“, kai jų nuo 10 iki 19 imtinai; „Mažai ilgų upių“ – kitu atveju.
  3. Patikrinkite ciklo rezultatą vektorizuota išraiška, nenaudodami ciklo.

6.2. Kaupiamoji suma su while

ExerciseUžduotis

Kontrolinio tipo. Duotos dienos išlaidos:

Kodas
islaidos <- c(18, 24, 15, 32, 20, 14)
biudzetas <- 100
  1. Naudodami while nustatykite, kiek pirmųjų iš eilės einančių dienų galima apmokėti neviršijant biudžeto. Jei įtraukus kitą dieną suma viršytų biudžetą, jos ir visų vėlesnių dienų neįtraukite. Lygybė biudžetui leidžiama.
  2. Išveskite apmokėtų dienų skaičių, išleistą sumą ir likutį.
  3. Pakartokite su biudžetais 10 ir 200. Kodas turi saugiai veikti ir tada, kai neįtraukiama nė viena diena arba įtraukiamos visos dienos.

6.3. Vektorinės sąlygos ir ciklo nutraukimas

ExerciseUžduotis
Kodas
balai <- c(4, 8, NA, 10, 6, 9)
  1. Su ifelse() sudarykite vektorių: „Išlaikyta“, kai balas bent 5, ir „Neišlaikyta“ kitu atveju. Praleistam balui palikite NA.
  2. Ciklu for peržiūrėkite balus nuo pradžios. Praleistą balą praleiskite su next. Radę pirmą balą, ne mažesnį nei 9, išsaugokite jo poziciją ir nutraukite ciklą su break.
  3. Numatykite, kokia būtų paieškos rezultato reikšmė, jei tokio balo nebūtų.

7 tema. Funkcijos ir apply šeima

7.1. Vektoriaus aprašymo funkcija

ExerciseUžduotis

Kontrolinio tipo. Sukurkite funkciją vektoriaus_santrauka(x, na_rm = FALSE).

  1. Funkcija turi priimti skaitinį vektorių x ir vieną loginę reikšmę na_rm. Netinkamo tipo argumentams naudokite stop() arba stopifnot().
  2. Grąžinkite vardinį skaitinį vektorių: n – pradinis ilgis, n_na – praleistų reikšmių skaičius, vidurkis, mediana ir sd. na_rm turi valdyti tik šių trijų charakteristikų skaičiavimą.
  3. Patikrinkite funkciją su c(2, 4, NA, 8) abiem na_rm atvejais.
  4. Naudodami sapply() pritaikykite ją iris pirmiesiems keturiems stulpeliams. Gautą matricą paverskite duomenų lentele ir eksportuokite į iris_santrauka.csv. Charakteristikų vardus išsaugokite atskiru stulpeliu.

7.2. Skaičiavimai grupėse

ExerciseUžduotis

Kontrolinio tipo. Naudokite airquality.

  1. Su tapply() apskaičiuokite Ozone vidurkį kiekvieną mėnesį (Month), skaičiuodami praleistas reikšmes pašalinkite.
  2. Nustatykite, kurio mėnesio vidurkis mažiausias. Grąžinkite mėnesio numerį, o ne jo poziciją rezultatų vektoriuje.
  3. Su aggregate() apskaičiuokite Wind minimumą kiekvieną mėnesį.
  4. Su tapply() suskaičiuokite kiekvieno mėnesio dienas, kuriomis Temp >= 90. Naudokite visas pradines eilutes; Ozone praleistos reikšmės šiam skaičiavimui nesvarbios.

7.3. Funkcijos argumentai ir grąžinamas sąrašas

ExerciseUžduotis

Sukurkite funkciją virs_ribos(x, riba = 0).

  1. x turi būti skaitinis vektorius be praleistų ar begalinių reikšmių, o riba – vienas baigtinis skaičius. Netinkamą įvestį atmeskite.
  2. Grąžinkite sąrašą su elementais reiksmes – visos reikšmės, griežtai didesnės už ribą, pozicijos – jų pozicijos pradiniame vektoriuje, kiekis – tokių reikšmių skaičius.
  3. Patikrinkite funkciją su c(-2, 0, 3, 7) naudodami numatytą ribą ir ribą 5. Patikrinkite atvejį, kai nė viena reikšmė netinka, ir tuščią numeric(0).
  4. Su lapply() pritaikykite funkciją sąrašo list(A = c(-1, 4, 6), B = c(0, 2)) elementams, kai riba lygi 3. Paaiškinkite rezultato struktūrą.