Uvod u R

GitHub repozitorijum

Milan Kilibarda

Analiza prostorno vremenskih podataka - Master studije geoinformatike, Građevinski fakultet u Beogradu

2026-03-30

Sadrzaj

  • Deo I: Osnovno o R-u?
  • Deo II: Uvod u sintaksu R programskog jezika
  • Deo III: R paketi
  • Deo IV: Tipovi i strukture podataka u R-u
  • Deo V: R jezik

Infografik

Pregledani video

Deo I: Osnovno o R-u

Zašto R?

  • 🚀 Moćan statistički alat: R je programski jezik, inicijalno namenjen statističkom računanju i vizualizaciji podataka.
  • 🌍 Besplatan i otvorenog koda: Free and open source okruženje dostupno na različitim platformama.
  • 🤝 Aktivna zajednica: Fantastična podrška kroz #rstats zajednicu na Twitter-u i Stack Overflow.
  • 📦 Proširivo okruženje: Mnoštvo dostupnih paketa za različite oblasti - pogledaj CRAN Task View.
  • 🎓 Akademska prihvaćenost: R je široko prihvaćen u akademskoj zajednici za istraživanja i nastavu.
  • 📈 Brz rast: Jedan od najbrže rastućih programskih jezika u svetu podataka.
  • 🗺️ Rad sa prostornim podacima: Jedna od ključnih oblasti razvoja, sa snažnim paketima za GIS analize.

R okruzenje

R GUI

R-studio

R GUI

Deo II: Uvod u sintaksu R programskog jezika

Aritmetičke operacije

Aritmetičke operacije

Operator Značenje
+ Sabiranje
- Oduzimanje
* Množenje
/ Deljenje
^ Stepenovanje

Primeri

5 + 3
[1] 8
1 * 10
[1] 10
10^2
[1] 100

Specijalne vrednosti

Specijalne vrednosti

Value Znacenje
Inf Infinity
NA Not Available
NaN Not a Number
NULL Empty object

Primeri specijalnih vrednosti

1/0
[1] Inf
NA + 3
[1] NA
NA == 1
[1] NA
0/0
[1] NaN
NULL
NULL

Logički operatori i specijalne vrednosti

Logički operatori

Operator Značenje
== Jednako
> Vece
>= Manje ili jednako
< Manje
<= Manje ili jednako
!= Različito
& i
| ili
! Negacija

Primeri

1 < 2
[1] TRUE
2 >= 2
[1] TRUE
2 != 2
[1] FALSE

Objekti i promenljive u R-u

  • 🗂️ Objektno-orijentisan jezik: R je objektno-orijentisan programski jezik namenjen radu sa podacima.
  • 📦 Podaci kao objekti: Svi podaci i funkcije čuvaju se u okviru R objekata.
  • 🏷️ Promenljive kao objekti: Svaku promenljivu možemo smatrati objektom, tj. naziv/ime pod kojim skladištimo i pozivamo određene podatke.
  • 🔗 Dodeljivanje vrednosti: Za dodeljivanje imena promenljivoj koristi se operator <- ili =.

📊 Primer:

die <- 1:6  # Skladištenje niza brojeva od 1 do 6

die         # Pozivanje promenljive "die"
[1] 1 2 3 4 5 6
  • 🔢 Operator :: Koristi se za kreiranje vektora brojeva u obliku od:do (npr. 1:6).
  • 📝 Komentari: # služi za komentarisanje koda. Sve što stoji desno od znaka # neće se izvršavati.

R je case sensitive

💡 Napomena:

Promenljive u R-u su osetljive na veličinu slova (Case Sensitive), pa su Promenljiva i promenljiva dve različite promenljive.

Name <- 1
name <- 0
Name + 1
[1] 2

Svi kreirani objekti se skladište u ovkiru radnog okruženja i mogu se pregledati komandom ls():

ls()
[1] "die"             "name"            "Name"            "pandoc_dir"     
[5] "quarto_bin_path"

Uklanjanje odredenog objekta iz radnog okruženja/memorije vrši se komandom rm():

rm(Name)

📊 Funkcije u R-u

  • 🔢 Matematičke funkcije: Osnovna instalacija R-a sadrži glavne matematičke funkcije:
round(3.1415)    # Zaokruživanje broja
[1] 3
factorial(3)     # Faktorijel broja 3
[1] 6
pi               # Pozivanje konstante π
[1] 3.141593
sin(pi/2)        # Sinus od π/2
[1] 1

💡 Napomena:

  • round() zaokružuje brojeve.
  • factorial() računa faktorijel.
  • pi vraća vrednost broja π.
  • sin() izračunava sinus.

📊 Funkcije u R-u - simulacija bacanja kocke

  • 🎲 Simulacija bacanja kockice: Funkcija sample omogućava nasumično biranje elemenata.
die <- 1:6                     # Definisanje vektora (kockica sa 6 strana)
sample(x = die, size = 1)      # Nasumično biranje jednog broja
[1] 4

💡 Napomena:

  • sample() služi za uzorkovanje iz vektora.

❔Help

Jedna od veoma korisnih mogućnosti R programskog okruženja je brz i jednostavan uvid u dokumentaciju za određene funkcije, putem komande help. Na primer, da biste saznali više o funkciji sample, jednostavno pozovite:

  • Pozivanje komande ?sample otvara pomoćni prozor sa svim relevantnim informacijama o funkciji.
  • Ova komanda uključuje opis funkcije, argumente, primene i slične funkcije.
?sample

📊 Kreiranje sopstvene funkcije u R-u

Funkcije su osnovni gradivni blokovi R programskog jezika. Omogućavaju nam da organizujemo kod, izbegnemo ponavljanje i povećamo efikasnost.

Šta je funkcija?

Funkcija je blok koda koji izvršava određeni zadatak.

Sastoji se od:

  • Imena (naziv funkcije)
  • Argumenata (ulazni podaci)
  • Tela (kod koji se izvršava)
  • Povratne vrednosti (rezultat funkcije)

Sintaksa funkcije

Funkcija se kreira pomoću ključne reči function() i vitičastih zagrada {}:

ime_funkcije <- function(argumenti) {
  # Telo funkcije
  return(rezultat)  # Povratna vrednost
}

Na primer, funkcija koja simulira bacanje dve kockice i sumiranje rezultata se može kreirati na sledeci nacin:

roll <- function() {
  die <- 1:6
  dice <- sample(die, size = 2, replace = TRUE)
  sum(dice)
}
roll()
[1] 5

Ključne napomene:

  • Ova funkcija nema argumente – koristi fiksne vrednosti.

  • Funkcija sample() služi za nasumično uzorkovanje.

  • Argument replace = TRUE omogućava ponavljanje vrednosti.

Argumenti funkcije

Argumenti funkcije su promenljive od kojih zavisi rezultat izvršavanja funkcije, i definišu se u okviru operatora function().

Na primer, zamislimo da kockica nema vrednosti od 1 do 6, nego proizvoljnih šest vrednosti koje su definisane pravilima igre. U tom slučaju, mora se ostaviti mogućnost za definisanje vrednosti.

roll2 <- function(dice) {
  dice <- sample(dice, size = 2, replace = TRUE)
  sum_dice <- sum(dice)
  return(sum_dice) #  povratna vrednost
}

roll2(dice = 2:8) # bacanje 2 kockice koje imaju vrednosti od 2 do 8, ne 1 do 6
[1] 11

📦Poglavlje III: R paketi

📦 R Paketi

R paketi su osnova R ekosistema. Oni omogućavaju proširivanje funkcionalnosti R-a za različite tematske oblasti.

Šta su R paketi?

  • Set funkcija: Kreirani od strane korisnika za rešavanje specifičnih zadataka.
  • Dokumentacija: Uključuju help dokumentaciju i primere korišćenja.
  • Podaci: Često sadrže i male setove podataka za demonstraciju.

Broj R paketa

  • Do danas, na CRAN-u (Centralni R Arhiv) postoji preko 20000 paketa.
  • CRAN Task View pruža pregled paketa po tematskim oblastima.
  • Još mnostvo R paketa je dostupno u svojoj razvojnoj verziji na web repozitorijumima (github)

Instalacija R paketa

  • Paketi se instaliraju pozivom komande install.packages()
  • Instaliranje paketa znači njegovo smestanje u memoriji racunara, na odredenoj lokaciji, odnosno folderu kojeg nazivamo library.
  • Da bi funkcije određenog paketa bile dostupne prilikom rada, neophodno ga je učitati paket u radno oruženje, odnosno u radnu sesiju komandom library().

Primer instaliranja i učitavanja paketa readxl:

install.packages("readxl")
library(readxl)
  • Paket readxl omogućava funkcije za lako i brzo učitavanje excel fajlova.

Poglavlje IV: Tipovi i strukture podataka u R-u

Vektori 1️⃣2️⃣3️⃣4️⃣

  • Vektor je osnovna i najjednostavnija struktura podataka u R-u
  • Osnovna karakteristika vektora je da sadrži samo podatke istog tipa.
  • R razlikuje šest osnovnih tipova podataka:
Tip Test Konverzija
double is.double as.double
integer is.integer as.integer
character is.character as.character
logical is.logical as.logical
complex is.complex as.complex
raw is.raw as.raw
  • is.vector je komanda koja se koristi za test-proveru da li je određeni objekat vektor.

Primeri kreiranja različitih tipova vektora

die <- c(1, 2, 3, 4, 5, 6)
die <- 1:6
die <- seq(1, 6, 1)
typeof(die)
[1] "double"
int <- c(-1L, 2L, 4L)
typeof(int)
[1] "integer"
text <- c("Geodezija",  "Geoinformatika")
typeof(text)
[1] "character"
3 > 4
[1] FALSE
logic <- c(TRUE, FALSE, TRUE)
typeof(logic)
[1] "logical"
typeof(F)
[1] "logical"
vec <- c(1, 2, 3, NA)
is.na(vec)
[1] FALSE FALSE FALSE  TRUE

Konverzija tipova podataka (Coercion)

  • Konverzija tipova podataka se npr. dešava kada se u jednom vektoru (ili matrici) nađu podaci razlicitih tipova.
  • U tom slucaju R automatski sve podatke svodi na jedan tip po određenom pravilu.

Pravilo konverzije tipova podataka u R-u

Element-wise procedura kod vektora

Element-wise operacije omogućavaju primenu funkcije ili operatora na svaki element vektora ili matrice pojedinačno.

U R-u, mnoge funkcije su optimizovane da automatski primenjuju operacije na svaki element objekta bez potrebe za eksplicitnim petljama.

Element wise procedura

Vector Recycling

Vector recycling je procedura u R-u koja omogućava automatsko ponavljanje kraćih vektora kako bi odgovarali dužini dužih vektora prilikom primene operacija između vektora različitih dužina.

Vector recycling procedura

Atributi

  • Atribut je informacija koju možemo dodeliti vektoru (ili bilo kojem R objektu).
  • Atribut neće uticati na vrednosti objekta i neće se prikazivati kada prikazujemo objekat.
  • Postojanje atributa vezanih za neki objekat može se proveriti funkcijom attributes().
  • Međutim, postojanje određenih/specijalnih atributa vezanih za neki objekat može uticati na to kako će određena funkcija tretirati taj objekat.

Primer: Provera atributa

Postavimo primer objekta die i proverimo njegove atribute.

# Definisanje vektora
die <- 1:6

# Provera atributa objekta 'die'
attributes(die)
NULL

Atributi

  • Najcesće korišćeni atributi su: names, dimensions i classes.
die <- 1:6
names(die)
NULL
names(die) <- c("one", "two", "three", "four", "five", "six")
names(die)
[1] "one"   "two"   "three" "four"  "five"  "six"  
attributes(die)
$names
[1] "one"   "two"   "three" "four"  "five"  "six"  
die + 1 # atributi ne uticu na vrednosti  
  one   two three  four  five   six 
    2     3     4     5     6     7 

Atributi (dimensions i class)

  • Dodavanje atributa dimensions vrši se komandom dim().
  • U ovom primeru, jedno-dimenzionalni objekat (vektor) se transformiše u dvo-dimenzionalnu strukturu (matricu), čime se menja i drugi atribut class.
dim(die) <- c(2, 3)
class(die)
[1] "matrix" "array" 
  • Kao što je rečeno ranije, atributi mogu uticati na to kako ce se određene funkcije odnositi prema tom objektu.
  • Tako na primer, promena atributa class, uticaće na komandu print koja se izvrsava u pozadini kada želimo prikazati objekat na ekranu.
die
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Atributi (Dates i times)

  • Postojanje atributa class omogućava predstavljanje dodatnih tipova podataka, koji su različiti od osnovnih tipova kao što su double, integer, character itd.
  • Karakterističan primer je skladištenje informacija o vremenu koristeći POSIXct klasu, koja predstavlja datum i vreme kao broj sekundi koje su protekle od 1. januara 1970. godine.
vreme.sad <- Sys.time()
vreme.sad
[1] "2026-03-30 18:28:46 CEST"
typeof(vreme.sad)
[1] "double"
class(vreme.sad)
[1] "POSIXct" "POSIXt" 

Faktorski podaci u R-u

Faktorski podaci su posebna vrsta podataka u R-u koji se koriste za predstavljanje kategoričkih promenljivih.

Šta su faktorski podaci?

  • Kategoričke promenljive: Predstavljaju grupe ili kategorije (npr. pol, boja, nivo obrazovanja).
  • Fiksni nivoi: Imaju unapred definisane vrednosti (nivoi).
  • Interno kodirani: R čuva faktore kao celobrojne vrednosti sa pridruženim labelama.

Kreiranje faktora

Faktori se kreiraju pomoću funkcije factor().

# Primer: Faktor za predstavljanje polova
pol <- factor(c("muško", "žensko", "muško", "žensko"))
pol
[1] muško  žensko muško  žensko
Levels: muško žensko

🔢 Matrice

Matrice su dvo-dimenzionalne strukture u R-u koje skladište podatke u redovima i kolonama.

Kreiranje matrica

Matrice se kreiraju pomoću funkcije matrix(). Ključni argumenti su:

  • nrow – broj redova

  • ncol – broj kolona

  • byrow = TRUE/FALSE – način popunjavanja (po redovima ili kolonama)

# Definisanje niza vrednosti
die <- c(1, 2, 3, 4, 5, 6)

# Kreiranje matrice sa popunjavanjem po kolonama
m1 <- matrix(die, ncol  = 2)
print(m1)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
# Kreiranje matrice sa popunjavanjem po redovima
m2 <- matrix(die, nrow = 2, byrow = TRUE)
print(m2)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

Nizovi (Arrays) 🔢 🔢 🔢

Nizovi (arrays) su n-dimenzionalne strukture podataka u R-u koje proširuju koncept matrica na više dimenzija.

🏗 Struktura nizova

  • Možemo ih zamisliti kao skup matrica poređanih duž dodatne dimenzije.
  • Svaka matrica može predstavljati jedan set podataka prikupljen u određenom trenutku ili na određenom mestu.
  • Često se koriste u analizi vremenskih serija, obradi slika i GIS podacima.

🎨 Primena nizova

  • RGB fotografije se mogu predstaviti kao trodimenzionalni niz gde svaki sloj matrice sadrži vrednosti refleksije za R (crvenu), G (zelenu) i B (plavu) komponentu.
  • Multispektralne slike sa satelita mogu sadržavati 10+ slojeva, gde svaki sloj odgovara refleksiji na različitoj talasnoj dužini.

🛠 Kreiranje nizova

Nizovi se kreiraju pomoću funkcije array().

Ključni argumenti su:

- data – ulazni podaci (vektor koji će se oblikovati u niz)

- dim – dimenzije niza (broj redova, kolona i dodatnih slojeva)

Primer kreiranja niza

# Kreiranje 3x3x2 niza (2 sloja matrica 3x3)
data <- 1:18
dim <- c(3, 3, 2)  # 3 reda, 3 kolone, 2 sloja
array_data <- array(data, dim = dim)
print(array_data)
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18

Liste 📦

Liste su jednodimenzionalne strukture podataka u R-u koje mogu sadržavati objekte različitih tipova.

🔑 Ključne osobine lista:

  • ✅ Slično vektorima, liste grupišu podatke u jedan objekat.
  • Za razliku od vektora, elementi liste mogu biti različitih tipova (brojevi, tekst, logičke vrednosti, pa čak i druge liste).
  • ✅ Često se koriste za skladištenje rezultata analize ili podataka različitih struktura.

🛠 Kreiranje liste

Liste se kreiraju pomoću funkcije list().

# Kreiranje liste sa različitim tipovima podataka
num <- c(1,2,3,4,5,6)         # Numerički vektor
int <- c(10L, 20L, 30L)       # Celi brojevi (integer)
text <- c("Geodezija", "Geoinformatika")  # Tekstualni vektor
logic <- c(TRUE, FALSE, TRUE) # Logičke vrednosti (boolean)

lista <- list(num, int, text, logic)
lista
[[1]]
[1] 1 2 3 4 5 6

[[2]]
[1] 10 20 30

[[3]]
[1] "Geodezija"      "Geoinformatika"

[[4]]
[1]  TRUE FALSE  TRUE

Data Frame 📊

Data Frame je tabelarna struktura podataka u R-u koja skladišti vektore iste dužine u kolonama.

🔑 Ključne osobine Data Frame-a:

  • Slično Excel tabelama – koristi se za skladištenje podataka u redovima i kolonama.
  • Kolone mogu biti različitih tipova (brojevi, tekst, logičke vrednosti).
  • Dvo-dimenzionalna verzija liste – svaka kolona može biti različitog tipa, ali svi vektori moraju imati istu dužinu.
  • Najčešće korišćena struktura podataka u statistici, GIS-u, analizi podataka i mašinskom učenju.

Data Frame Primer 📊

U R-u, Data Frame može biti kreiran čak i kada ulazni vektori nisu iste dužine.
U tom slučaju, R primenjuje “element recycling”, tj. ponavlja kraće vektore dok ne dostignu dužinu najdužeg vektora.

# Definisanje vektora različitih dužina
num <- c(1, 2, 3, 4, 5, 6)      # 6 elemenata
int <- c(10L, 20L, 30L)         # 3 elementa
text <- c("Geo", "Info")        # 2 elementa
logic <- c(TRUE, FALSE, TRUE)   # 3 elementa

# Kreiranje Data Frame-a
dataframe <- data.frame(numeric = num, 
                        integer = int, 
                        tekst = text, 
                        logic = logic)
# Prikaz formiranog Data Frame-a
dataframe
  numeric integer tekst logic
1       1      10   Geo  TRUE
2       2      20  Info FALSE
3       3      30   Geo  TRUE
4       4      10  Info  TRUE
5       5      20   Geo FALSE
6       6      30  Info  TRUE

Sumarno o strukturama podataka u R-u

Strukture podataka u R-u

Komanda str() 🔍

Komanda str() omogućava brz pregled strukture R objekta.
Koristi se za ispitivanje tipova podataka, broja elemenata i organizacije objekta.

🛠 Primer upotrebe str()

# Pregled strukture Data Frame-a
str(dataframe)
'data.frame':   6 obs. of  4 variables:
 $ numeric: num  1 2 3 4 5 6
 $ integer: int  10 20 30 10 20 30
 $ tekst  : chr  "Geo" "Info" "Geo" "Info" ...
 $ logic  : logi  TRUE FALSE TRUE TRUE FALSE TRUE

Poglavlje V: R jezik

Izdvajanje (selektovanje) vrednosti podataka 🎯

U R-u postoji šest različitih načina izdvajanja vrednosti podataka,
a koriste se tri operatora za selektovanje elemenata:

  • [[ – koristi se za liste i data frame-ove (vraća direktnu vrednost)
  • [ – koristi se za vektore, matrice i data frame-ove (vraća podskup)
  • $ – koristi se za izdvajanje kolona iz Data Frame-a i listi po nazivu

Izdvajanje vrednosti vektora 🎯

U R-u možemo izdvajati vrednosti iz vektora koristeći pozitivne celobrojne indekse.
Indeksiranje uvek počinje od 1 (za razliku od nekih drugih jezika kao što su Python i C, gde kreće od 0).

🛠 Primer izdvajanja vrednosti

# Definisanje vektora
x <- c(2.1, 4.2, 3.3, 5.4)

# 1. Izbor specifičnih elemenata (3. i 1.)
x[c(3, 1)]  
[1] 3.3 2.1
# 2. Sortirano indeksiranje (vraća sortirani vektor)
x[order(x)]  
[1] 2.1 3.3 4.2 5.4
# 3. Ponovljeni indeks (pristup istom elementu više puta)
x[c(1, 1)]  
[1] 2.1 2.1
# 4. Korišćenje decimalnih brojeva (automatsko zaokruživanje)
x[c(2.1, 2.9)]  # U pozadini se svodi na x[c(2, 2)]
[1] 4.2 4.2

Izdvajanje vrednosti vektora 🎯

U R-u možemo izdvajati vrednosti vektora koristeći negativne celobrojne indekse i logičke vrednosti.

🚫 Izdvajanje negativnim indeksima

Kada koristimo negativne indekse, iz vektora isključujemo određene elemente, dok ostale zadržavamo.

# Definisanje vektora
x <- c(2.1, 4.2, 3.3, 5.4)

# Isključivanje prvog elementa, ostali ostaju
x[-1]  
[1] 4.2 3.3 5.4
# Isključivanje trećeg i prvog elementa
x[-c(3, 1)]  
[1] 4.2 5.4
# Logički vektor određuje koje vrednosti će biti uključene
x[c(TRUE, TRUE, FALSE, FALSE)]
[1] 2.1 4.2
# Izdvajanje vrednosti većih od 3
x[x > 3]  
[1] 4.2 3.3 5.4

🎯 Izdvajanje vrednosti Data frame-a

Izdvajanje vrednosti vektora i data frame-a celobrojnim vektorima

📋 Izdvajanje redova iz Data Frame-a

# Učitavanje ugrađenog Data Frame-a 'mtcars'
data(mtcars)

# Izdvajanje prvih 10 redova
mtcars[1:10, ]
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

🔹 Napomena:
- mtcars[1:10, ] selektuje prvih 10 redova, dok se sve kolone zadržavaju.
- Ako želimo samo određene kolone, dodajemo selektor za kolone (mtcars[1:10, c("mpg", "hp")]).

🔍 Prikaz prvih redova Data Frame-a

data(mtcars)

# Prikaz prvih n redova (podrazumevano 6)
head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
# Izdvajanje prvih 10 redova
mtcars[1:10, ]
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

🔹 Napomena:
- head(mtcars) prikazuje prvih 6 redova bez potrebe za ručnim indeksiranjem.
- Možemo koristiti head(mtcars, n = 10) za prikaz prvih 10 redova.

🏷️ Razlika između vektora i Data Frame-a pri selektovanju

# Selekcija prve kolone (kao vektor)
a <- mtcars[1:10, 1]
class(a)  # Vratiće "numeric"
[1] "numeric"
# Selekcija prve kolone, ali zadržavajući Data Frame strukturu
b <- mtcars[1:10, 1, drop = FALSE]
class(b)  # Vratiće "data.frame"
[1] "data.frame"

🔹 Napomena:
- drop = FALSE osigurava da se kolona zadrži kao Data Frame, umesto da se pretvori u vektor.
- Ovo je važno kada radimo sa više podataka i zadržavamo format tabele.

💡 Izdvajanje vrednosti Data Frame-a operatorom $

# Struktura Data Frame-a
str(mtcars)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
# Izdvajanje kolone 'hp' i pregled njenih vrednosti
summary(mtcars$hp)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   52.0    96.5   123.0   146.7   180.0   335.0 

🔹 Napomena:
- $ operator omogućava lako selektovanje kolone po imenu (mtcars$hp).
- summary(mtcars$hp) daje osnovnu deskriptivnu statistiku te kolone.

📌 Kada koristiti koji metod selekcije?

Metoda Koristi se za Vraća
df[row, col] Fleksibilna selekcija po redovima i kolonama Data Frame ili vektor
df$colname Izdvajanje kolone po imenu Vektor
df[, col, drop=FALSE] Zadržavanje Data Frame strukture pri selekciji kolone Data Frame

df[row, col] – za izdvajanje specifičnih redova i kolona
df$colname – za brzi pristup kolonama kao vektorima
drop=FALSE – za očuvanje strukture Data Frame-a pri selekciji kolone

🔥 Zaključak

Selekcija podataka je osnovni alat za manipulaciju i analizu podataka u R-u.
Kombinovanjem različitih metoda možemo efikasno izdvajati i transformisati podatke! 🚀

Izdvajanje vrednosti liste

lst <- list(numbers = c(1, 2), 
            logical = TRUE, 
            strings = c("a", "b", "c"))

lst
$numbers
[1] 1 2

$logical
[1] TRUE

$strings
[1] "a" "b" "c"

🗂️ Izdvajanje vrednosti liste

U R-u liste mogu sadržavati različite tipove podataka, pa postoji nekoliko načina za izdvajanje njihovih elemenata.

🔑 Načini selektovanja iz liste:

1️⃣ lst[1] – vraća podlistu (uvek kao lista).
2️⃣ lst$numbers – selektuje element po imenu (često kao vektor).
3️⃣ lst[[1]] – direktno izdvaja prvi element liste u njegovom originalnom tipu.

# Kreiranje liste
lst <- list(numbers = c(1, 2), 
            logical = TRUE, 
            strings = c("a", "b", "c"))

# Izdvajanje elemenata liste
lst[1]       # Vraća listu sa jednim elementom
$numbers
[1] 1 2
lst$numbers  # Vraća vektor brojeva
[1] 1 2
lst[[1]]     # Vraća vektor brojeva (identično lst$numbers)
[1] 1 2

Izdvajanje vrednosti liste

Izdvajanje vrednosti liste

✏️ Modifikovanje vrednosti vektora

U R-u možemo menjati pojedinačne ili više vrednosti u vektoru pomoću indeksiranja.

🛠 Primer modifikacije vrednosti u vektoru

vec <- c(0, 0, 0, 0, 0, 0)
vec
[1] 0 0 0 0 0 0
vec[1]
[1] 0
vec[1] <- 1000
vec
[1] 1000    0    0    0    0    0
vec[c(1, 3, 5)] <- c(1, 1, 1)
vec
[1] 1 0 1 0 1 0

✏️ Modifikovanje vrednosti Data Frame-a

U R-u možemo dodavati, menjati i reorganizovati kolone unutar Data Frame-a.

🛠 Primer modifikacije Data Frame-a

# Učitavanje ugrađenog Data Frame-a
data(mtcars)
# Čuvanje originalnih imena kolona
mtcars_names <- names(mtcars)
# Dodavanje nove kolone sa imenima redova
mtcars$name <- row.names(mtcars)
# Prikaz atributa Data Frame-a
attributes(mtcars)
# Uklanjanje imena redova (postavljanje na NULL)
row.names(mtcars)  <- NULL
# Dodavanje ID kolone (indeksiranje redova)
mtcars$id <- 1:nrow(mtcars)
# Reorganizacija kolona (ID i ime dolaze na početak)
mtcars <- mtcars[, c("id", "name", mtcars_names)]
# Kreiranje logičkog vektora koji označava automobile sa 4 cilindra
four_cyl <- ifelse(mtcars$cyl == 4, TRUE, FALSE)

🔀 Kontrola toka

Kontrola toka u R-u omogućava uslovno izvršavanje koda pomoću if, else if i else blokova.

Kontrola toka if-else

if (logicki uslov) {
  # Deo koda za slucaj TRUE
} else {
  # Deo koda za skucaj FALSE
}

Primer

# y vece od 10?
y = sample(1:20, size = 1)
if (y > 10) {
  print("Vece od 10")
} else {
  print("Manje od 10")
}
[1] "Vece od 10"

Kontrola toka else if

Kontrola toka else if

if (logicki_uslov_1) {
  # Deo koda za slucaj TRUE
} else if (logicki_uslov_2) {
  # Deo koda kada je prvi uslov FALSE 
  # ali je drugi    uslov TRUE
} else {
  # Deo koda kada su oba uslova FALSE
}

Primer

# y vece od 1 ali manje od 10?

if (y > 1) {
  print("Vece od 1")
} else if (y < 10) {
  print("vece od 1 ali manje od 10")
} else {
  print("Broj je veci od 10")
}
[1] "Vece od 1"

🔄 Petlje

Petlje omogućavaju ponavljanje izvršavanja koda dok god su zadovoljeni određeni uslovi.

🔑 Ključne napomene:

for petlja se koristi kada znamo koliko puta treba ponoviti kod.

while petlja se koristi kada želimo ponavljanje dok je uslov tačan.

Obe petlje omogućavaju automatizaciju ponavljajućih zadataka.

Primer

for i while petlje

for (promenljiva in sekvenca) {
  # Kod koji se izvrsava u  
  # zavisnosti od vrednosti promenljive
}

while (logicki_uslov) {
  # Kod koji se izvrsava 
  # dok je uslov TRUE
}
# sum of squares
t <- 1:3
y <- 0

for (x in t) {
  y <- y + x^2
}
print(y)
[1] 14
x=2;
y=0
brIteracija =0

while (y<20) {
    brIteracija =brIteracija +1
    y <- y + x^2
    print(paste("Iteracija broj:", 
                brIteracija, 
                "y =", y, sep=" "))
}
[1] "Iteracija broj: 1 y = 4"
[1] "Iteracija broj: 2 y = 8"
[1] "Iteracija broj: 3 y = 12"
[1] "Iteracija broj: 4 y = 16"
[1] "Iteracija broj: 5 y = 20"

📂 Definisanje radnog direktorijuma

Radni direktorijum (working directory) je folder u kojem R traži i čuva fajlove.
Postavljanje tačnog radnog direktorijuma je ključno za učitavanje i čuvanje podataka.

🔑 Ključne napomene:

getwd() – prikazuje trenutni radni direktorijum.
setwd() – omogućava postavljanje novog direktorijuma.
list.files() – prikazuje sve fajlove u direktorijumu.
Svi fajlovi bez pune putanje se traže u radnom direktorijumu.

Pravilno postavljen radni direktorijum omogućava lakši rad sa fajlovima i analizom podataka u R-u! 🚀

getwd()
[1] "C:/Users/user/Documents/GitHub/AnalizaProstornoVremenskihPodataka/00_R"
setwd("D:/R_projects/Space_Time Data/!Uvod u R")

📌 Paket here – Rad sa putanjama fajlova

Paket here omogućava jednostavno i dinamičko upravljanje putanjama fajlova u R projektima.
Koristan je jer eliminiše potrebu za ručno podešavanje radnog direktorijuma (setwd()).

  • Automatski prepoznaje direktorijum R projekta

  • Omogućava lakše organizovanje fajlova u potprojekte (data/, results/)

  • Radi bez potrebe za setwd()

🛠 Instalacija paketa here

install.packages("here")  # Instalacija paketa (pokrenuti samo jednom)
read.csv("data", "podaci.csv"))  # Automatsko prepoznavanje putanje

📥 Učitavanje podataka u R-u

U R-u možemo učitavati podatke iz različitih formata kao što su CSV, Excel, RDS, JSON, i drugi.

📌 Učitavanje CSV fajlova

file_path <- here::here("00_R","data", "Studenti_IG2_20_21.txt")
file_path
[1] "C:/Users/user/Documents/GitHub/AnalizaProstornoVremenskihPodataka/00_R/data/Studenti_IG2_20_21.txt"
studenti <- read.table(file_path, sep = ",", header = TRUE, 
                       stringsAsFactors = FALSE)
head(studenti) # komanda
  Broj      Prezime       Ime Br..Ind. God.upisa prvi_kol drugi_kol
1    1      Aleksic Andrijana     1008        18       40        NA
2    2   Andrijevic  Katarina     1036        17       10        NA
3    3      Ackovic      Mina     1018        18      100        51
4    4        Babic    Milica     1032        17       NA        NA
5    5 Bastovanovic       Iva     1010        18       20        60
6    6    Biberovic      Anja     1007        18      100        80
  jun_prvi_kol jun_drugi_kol jun_ceo_ispit
1           NA            NA            NA
2           NA            NA            NA
3           NA            NA            NA
4           NA            NA            NA
5           85            NA            NA
6           NA            NA            NA

Ucitavanje podataka u R-u

file_path <- here::here("00_R","data", "Studenti_IG2_20_21.txt")
file_path
[1] "C:/Users/user/Documents/GitHub/AnalizaProstornoVremenskihPodataka/00_R/data/Studenti_IG2_20_21.txt"
studenti <- read.table(file_path, sep = ",", header = TRUE, 
                       stringsAsFactors = FALSE)
head(studenti) # komanda
  Broj      Prezime       Ime Br..Ind. God.upisa prvi_kol drugi_kol
1    1      Aleksic Andrijana     1008        18       40        NA
2    2   Andrijevic  Katarina     1036        17       10        NA
3    3      Ackovic      Mina     1018        18      100        51
4    4        Babic    Milica     1032        17       NA        NA
5    5 Bastovanovic       Iva     1010        18       20        60
6    6    Biberovic      Anja     1007        18      100        80
  jun_prvi_kol jun_drugi_kol jun_ceo_ispit
1           NA            NA            NA
2           NA            NA            NA
3           NA            NA            NA
4           NA            NA            NA
5           85            NA            NA
6           NA            NA            NA

Neke funkcije za uvoz i izvoz podataka u R

U R-u postoji više funkcija za čitanje i pisanje podataka iz fajlova i obratno kao što su:

  • readLines, writeLines;

  • scan, write;

  • read.csv, write.csv;

  • read.csv2, write.csv2;

  • read.delim, write.delim;

  • read.delim2, write.delim2;

Literatura