8. Filtriranje, sortiranje i mijenjanje (mutate) podataka¶
gapminder dataset¶
U ovoj vježbi koristit ćemo dva paketa:
gapminder
- koji predstavlja skup podataka (dataset)dplyr
- koji sadrži funkcije za manipuliranje podacima (filter
,arrange
,mutate
, ...)
Gapminder dataset je izvadak podataka dostupan na gapminder.org za 142 države (uključujući Hrvatsku), a paket osigurava vrijednosti
očekivanog trajanja života, BDP-a po glavi stanovnika te broj stanovnika mjerenih svakih pet godina od 1952. do 2007. godine.
U svakom slučaju vrlo interesantan skup za vježbanje.
Na samom početku ćemo instalirati ta dva paketa: gapminder
i dplyr
# Učitavamo pakete gapminder i dplyr
# Ukoliko ih nemamo u sustavu moramo ih instalirati naredbama
install.packages('gapminder')
install.packages('dplyr')
Installing package into ‘/usr/local/lib/R/site-library’ (as ‘lib’ is unspecified) Installing package into ‘/usr/local/lib/R/site-library’ (as ‘lib’ is unspecified)
A, zatim ćemo ih učitati:
library('gapminder')
library('dplyr')
Attaching package: ‘dplyr’ The following objects are masked from ‘package:stats’: filter, lag The following objects are masked from ‘package:base’: intersect, setdiff, setequal, union
Pogledajmo sada prva tri zapisa gapminder
dataseta:
head(gapminder, 3)
country | continent | year | lifeExp | pop | gdpPercap |
---|---|---|---|---|---|
<fct> | <fct> | <int> | <dbl> | <int> | <dbl> |
Afghanistan | Asia | 1952 | 28.801 | 8425333 | 779.4453 |
Afghanistan | Asia | 1957 | 30.332 | 9240934 | 820.8530 |
Afghanistan | Asia | 1962 | 31.997 | 10267083 | 853.1007 |
Iz ovog kratkog pregleda možemo vidjeti da baza sadrži 6 stupaca, tj varijabli.
Ukoliko unesemo ime dataseta vidjeti ćemo sve podatke tj. 1704 redka (mjerenja, opservacije, opažanja).
Nemamo toliko mjesta na ekranu, pa ćemo radije pogledati strukture naše baze.
str(gapminder)
tibble [1,704 × 6] (S3: tbl_df/tbl/data.frame) $ country : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ... $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ... $ year : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ... $ lifeExp : num [1:1704] 28.8 30.3 32 34 36.1 ... $ pop : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ... $ gdpPercap: num [1:1704] 779 821 853 836 740 ...
Filtriranje¶
Filtriranje ćemo često koristiti kod analize i vizualizacije podataka.
U tu svrhu koristiti ćemo oznaku %>%
(pipe) i funkciju filter()
koja treba sadržavati neki kriterij.
Primjer: Prikažite sva mjerenja iz 2007. godine.
Primjećujete da se dvostruko "=" koristi za uspoređivanje.
gapminder %>%
filter(year==2007)
više kriterija u filteru...¶
Ukoliko želimo filtrirati bazu prema više kriterija, dovoljno ih je odvojiti zarezom.
Primjer: Prikažite mjerenja za Hrvatsku nakon 1990. godine.
gapminder %>%
filter(country=='Croatia', year>1990)
Sortiranje¶
Da bi prikazali podatke željenim redoslijedom koristiti ćemo funkciju arrange()
.
Funkcija arrange()
se koristi na sličan način kao i funkcija filter()
.
Dakle nakon imena dataseta i znaka pipe-a unesemo varijablu po kojoj želimo sortirati podatke.
Osnovo sortiranje je uzlazno (od najmanjeg prema najvećem), no ukoliko želimo sortirati silazno moramo koristiti opciju desc()
.
Primjer: Sortirajte naš dataset prema broju stanovnika.
gapminder %>%
arrange(pop)
Zadatak:¶
Prikažite sve države koje su 2007 godine imale više od 200 milijuna stanovnika.
Rezultate sortirajte silazno prema nazivu države.
Dakle, da bi kombinirali filtriranje i sortiranje potrebno ih je samo povezati pipe znakovima.
gapminder %>%
filter(year==2007, pop>200000000) %>%
arrange(desc(country))
country | continent | year | lifeExp | pop | gdpPercap |
---|---|---|---|---|---|
<fct> | <fct> | <int> | <dbl> | <int> | <dbl> |
United States | Americas | 2007 | 78.242 | 301139947 | 42951.653 |
Indonesia | Asia | 2007 | 70.650 | 223547000 | 3540.652 |
India | Asia | 2007 | 64.698 | 1110396331 | 2452.210 |
China | Asia | 2007 | 72.961 | 1318683096 | 4959.115 |
Mutate (kreiranje novog stupca ili mijenjanje podataka unutar postojećeg)¶
Da bi izmijenili podatke u postojećem stupcu, koristiti ćemo funkciju mutate()
.
Primjer: Prikažite dataset 'gapminder' tako da stupac 'pop' prikazuje broj stanovnika izražen u milijunima.
(Drugim riječima podijelimo ga sa 1,000,000)
gapminder %>%
mutate(pop=pop/1000000)
Kao što vidite, opet koristimo pipe na našem datasetu.
Dataset gapminder, zapravo nije izmijenjen, nego je samo kao takav ispisan na ekranu.
Da bi zaista promijenili naš dataset moramo to napraviti na slijedeći način:
gapminder <- gapminder %>% mutate(pop=pop/1000000)
Dodavanje stupca u dataset.
Ponekad ne želimo mijenjati postojeće podatke, već želimo dodati novi stupac koji ima izmijenjene podatke.
Primjer: U dataset gapminder dodajte novi stupac 'pop_mil' koji će sadržavati broj stanovnika izražen u milijunima.
# Za prikaz dataseta sa dodanim stupcem
gapminder %>% mutate(pop_mil=pop/1000000)
# Da bi zaista promijenili dataset 'gapminder', koristiti ćemo slijedeću naredbu:
# gapminder <- gapminder %>% mutate(pop_mil=pop/1000000)