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