4. Podatkovni okviri (DataFrames)¶
Upitnik: Znate li što znači skraćenica TWAIN (kao tehnologija koja se koristi kod scaniranja)?
 
Kada pogledamo vektore, svi njihovi elementi moraju biti istog tipa.
Isto vrijedi i za matrice...
Ali u stvarnom životu nije tako. Vrlo često baratamo s 'miješanim' podacima.
U tu svrhu koristimo dataframe
Primjer: ukucajte iris, da bi vam se ispisao istoimeni dataframe
iris
Odmah u "glavu"... ili u "head"¶
Primjetili ste da podatkovni okviri (dataframeovi) mogu biti veliki i nije ih uvijek zgodno ispisati cijele...
Stoga ćemo koristiti funkciju head()
Isprobajte ga na iris dataframeu. Dobiti ćemo samo prvih nekoliko redaka.
Možemo ispisati i proizvoljan broj redaka.
Isprobajte ga i na dataframeu mtcars tako da ispišete samo prva dva retka tog podatkovnog okvira.
head(iris)
head(mtcars, 2)
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | |
|---|---|---|---|---|---|
| <dbl> | <dbl> | <dbl> | <dbl> | <fct> | |
| 1 | 5.1 | 3.5 | 1.4 | 0.2 | setosa | 
| 2 | 4.9 | 3.0 | 1.4 | 0.2 | setosa | 
| 3 | 4.7 | 3.2 | 1.3 | 0.2 | setosa | 
| 4 | 4.6 | 3.1 | 1.5 | 0.2 | setosa | 
| 5 | 5.0 | 3.6 | 1.4 | 0.2 | setosa | 
| 6 | 5.4 | 3.9 | 1.7 | 0.4 | setosa | 
| mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| Mazda RX4 | 21 | 6 | 160 | 110 | 3.9 | 2.620 | 16.46 | 0 | 1 | 4 | 4 | 
| Mazda RX4 Wag | 21 | 6 | 160 | 110 | 3.9 | 2.875 | 17.02 | 0 | 1 | 4 | 4 | 
Struktura¶
Funkcijom str() možemo steći uvid u strukturu nekog dataframea
Isprobajte ju na iris
str(iris)
'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Prvi DataFrame¶
Pa, kreirajmo naš prvi dataframe.
Postupak je sličan kao i kod kreiranja matrice, samo što ovaj put ne moramo paziti da su nam svi vektori istog tipa.
Kreirajmo najprije nekoliko vektora:
tjedan_v <- c('pon', 'uto', 'sri', 'čet', 'pet')
potrosnja_v <- c(11, 12, 13, 14, 15)
suncano_v <- c(T, F, T, T, F, F)
Sada naredbom data.frame kreiramo dataframe troskovi_df od ovih vektora:
troskovi_df <- data.frame(tjedan_v, potrosnja_v, suncano_v)
Bez brige, pogreška je namjerna...
Da bi kreirali dataframe od vektora, svi vektori moraju biti iste duljine.
Dakle, ispravite vektor suncano_v tako da obrišete posljednju vrijednost (onaj F).   Nemojte zaboraviti opet stisnuti 'ctrl + enter'.
Zadatak
Ispišite prva tri retka našeg dataframea, a zatim ispišite njegovu strukturu.
head(troskovi_df, 3)
| tjedan_v | potrosnja_v | suncano_v | |
|---|---|---|---|
| <chr> | <dbl> | <lgl> | |
| 1 | pon | 11 | TRUE | 
| 2 | uto | 12 | FALSE | 
| 3 | sri | 13 | TRUE | 
str(troskovi_df)
'data.frame': 5 obs. of 3 variables: $ tjedan_v : chr "pon" "uto" "sri" "čet" ... $ potrosnja_v: num 11 12 13 14 15 $ suncano_v : logi TRUE FALSE TRUE TRUE FALSE
Zadatak (zadaci)
Ispišite potrošnju za ponedjeljak, srijedu i petak
troskovi_df[c(1,3,5), 'potrosnja_v']
troskovi_df$potrosnja_v[c(1,3,5)]
- 11
- 13
- 15
- 11
- 13
- 15
Napravite dataframe naziva tros_df u kojega ćete ubaciti prva tri retka i prva dva stupca dataframe-a troskovi_df.
tros_df <- troskovi_df[c(1:3), c(1:2)] #1. način
tros_df <- troskovi_df[c(1,2,3), c(1,2)] #2. način
tros_df <- troskovi_df[c(1:3), c('tjedan_v', 'potrosnja_v')] #3. način
tros_df
| tjedan_v | potrosnja_v | |
|---|---|---|
| <chr> | <dbl> | |
| 1 | pon | 11 | 
| 2 | uto | 12 | 
| 3 | sri | 13 | 
Dodajte u dataframe troskovi_df oblačnu subotu kada je bio trošak 20.
tjedan_v <- c('sub')
potrosnja_v <- c(20)
suncano_v <- c(F)
novi_df <- data.frame(tjedan_v, potrosnja_v, suncano_v)
t_df <- rbind(troskovi_df, novi_df)
t_df
| tjedan_v | potrosnja_v | suncano_v | 
|---|---|---|
| <chr> | <dbl> | <lgl> | 
| pon | 11 | TRUE | 
| uto | 12 | FALSE | 
| sri | 13 | TRUE | 
| čet | 14 | TRUE | 
| pet | 15 | FALSE | 
| sub | 20 | FALSE | 
Da li je bilo sunčano u srijedu?
troskovi_df[3,3]
troskovi_df[3, 'suncano_v']
troskovi_df$suncano_v[3]
Zadatak
U vektor pot_v unesite svu potrošnju od utorka do petka.
Ispišite ga.
pot_v <- troskovi_df[2:5,2] #1. način
pot_v <- troskovi_df[2:5,'potrosnja_v'] #2. način
pot_v <- troskovi_df$potrosnja_v[2:5] #3. način
pot_v
- 12
- 13
- 14
- 15