TEHNIČKO VELEUČILIŠTE U ZAGREBU Primijenjena statistika LV5 Podaci u okruženju R – matrica, lista i podatkovni okvir – izvješće pomoću knjižnice RMarkdown

1. Problem, zadatak

Matrice, liste podataka i podatkovni okviri

2. Cilj

Prikazati rad s podacima u obliku matrica, listi i podatkovnog okvira.

3. Kratki opis metode rada i koristenih podataka

Napisati i izvršiti R skriptu na zadanu temu.

4. R skripta, s pojasnjenjima i rezultatima izvršenja skripte

rm(list=ls())

Zadavanje podataka u obliku matrice: matrix()

matrix(1:9, nrow = 3, ncol = 3)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
matrix(1:9, nrow = 3)# isto, zadavanje broja redaka:
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Popunjavanje matrice po redovima

matrix(1:9, nrow=3, byrow=TRUE)    
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

Nazivi redova i stupaca matrice

x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))
x
##   A B C
## X 1 4 7
## Y 2 5 8
## Z 3 6 9

Nazivi redova i stupaca: funkcije rownames() i colnames():

colnames(x)
## [1] "A" "B" "C"
rownames(x)
## [1] "X" "Y" "Z"

Promjena naziva redova i stupaca

colnames(x) <- c("C1","C2","C3")
rownames(x) <- c("R1","R2","R3")
x
##    C1 C2 C3
## R1  1  4  7
## R2  2  5  8
## R3  3  6  9

Zadavanje matrica funkcijama (povezivanjem redova i stupaca i obrnuto):cbind() i rbind()

cbind(c(1,2,3),c(4,5,6))
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
rbind(c(1,2,3),c(4,5,6))
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Kreiranje matrice iz vektora postavljanjem dimenzije: dim()

x <- c(1,2,3,4,5,6)
x
## [1] 1 2 3 4 5 6
class(x)
## [1] "numeric"
dim(x) <- c(3,2)
x
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
class(x)
## [1] "matrix" "array"

Dohvaćanje elemenata matrice korištenjem cjelobrojnog vektora kao indeksa:

x
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
x[c(2,3),c(1,2)]    # biranje redaka 2 i 3 i stupaca 1 i 2
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6
x[c(3,2),]    # polje stupca prazno: izbor svih stupaca
##      [,1] [,2]
## [1,]    3    6
## [2,]    2    5
x[,]    # prazno polje redaka i stupaca: cijela matrica
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
x[-1,]    # Biramo sve retke osim prvog
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6

Uzmeno li samo redak ili stupac, dobijemo vektor:

x[1,]
## [1] 1 4
class(x[1,])
## [1] "numeric"
# To se može izbjeći korištenjem argumenta drop = FALSE kod ineksiranja.
x[1,,drop=FALSE]  # now the result is a 1X3 matrix rather than a vector
##      [,1] [,2]
## [1,]    1    4
class(x[1,,drop=FALSE])
## [1] "matrix" "array"

Indeksiranje matrice vektorom.

x
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
x[1:4]
## [1] 1 2 3 4
x[c(3,5,7)]
## [1]  3  5 NA

Indeksiranje matrice vektorom tipa logical

x
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
x[c(TRUE,FALSE),c(TRUE,TRUE)]
##      [,1] [,2]
## [1,]    1    4
## [2,]    3    6
x[c(TRUE,FALSE),c(2)]
## [1] 4 6
x[x>5]    # bira elemente veće od 5
## [1] 6
x[x%%2 == 0]    # bira samo parne brojeve
## [1] 2 4 6

Modifikacije matrica, modifikacija pojedinih elemenata matrice:

x
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
x[2,2] <- 10; x    # modifikacija jednog elementa
##      [,1] [,2]
## [1,]    1    4
## [2,]    2   10
## [3,]    3    6
x[x<5] <- 0; x    # modifikacija elementa manjeg od 5
##      [,1] [,2]
## [1,]    0    0
## [2,]    0   10
## [3,]    0    6

Transponiranje matrice

t(x)    
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6
x<- t(x)
x
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6
cbind(x, c(1, 2))    # dodavanje stupca
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    1
## [2,]    0   10    6    2
rbind(x,c(1,2))    # dodavanje retka
## Warning in rbind(x, c(1, 2)): number of columns of result is not a multiple of
## vector length (arg 2)
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6
## [3,]    1    2    1
x <- x[1:2,]; x    # micanje posljednjeg retka
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6

Dimenzija matrice može se modificirati funkcijom: dim()

x
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6
dim(x) <- c(2,3); x    # change to 2X3 matrix
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0   10    6
dim(x) <- c(1,6); x    # change to 1X6 matrix
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    0    0    0   10    0    6

Lista podataka:

Lista je podatkovna struktura sastavljena od mješovitih tipova podataka

Da li se radi o listi provjeravamo funkcijom: typeof() Duljinu liste provjeravamo funkcijom length()

Kreiranje liste

x <- list("a" = 2.5, "b" = TRUE, "c" = 1:3) # lista sastavljena od tri 
# komponente s podacima tipa: double, logical and integer
x
## $a
## [1] 2.5
## 
## $b
## [1] TRUE
## 
## $c
## [1] 1 2 3
typeof(x)
## [1] "list"
length(x)
## [1] 3
str(x) # struktura liste
## List of 3
##  $ a: num 2.5
##  $ b: logi TRUE
##  $ c: int [1:3] 1 2 3

Kreiranje liste:

x <- list(2.5,TRUE,1:3)
x
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] TRUE
## 
## [[3]]
## [1] 1 2 3

Dohvaćanje elemenata liste:

x
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] TRUE
## 
## [[3]]
## [1] 1 2 3
x[c(1:2)]    # Korištenjem vektora tipa integer
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] TRUE
x[-2]        # korištenjem negativnog broja za 
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] 1 2 3
# iskljućenje drugog elementa
x[c(T,F,F)]  # Korištenjem vektora tipa logical
## [[1]]
## [1] 2.5
x[c("age","speaks")]    # Korištenjem vektora tipa Character
## [[1]]
## NULL
## 
## [[2]]
## NULL
x["age"]
## [[1]]
## NULL
typeof(x["age"])    # jednostruka [ vraća listu
## [1] "list"
x[["age"]]    # dvostruka [[ vraća sadržaj
## NULL
typeof(x[["age"]])
## [1] "NULL"

Modifikacija liste u programskom okruženju R:

x[["name"]] <- "Clair"; x
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] TRUE
## 
## [[3]]
## [1] 1 2 3
## 
## $name
## [1] "Clair"
x[["married"]] <- FALSE # Dodavanje komponente u listu
x
## [[1]]
## [1] 2.5
## 
## [[2]]
## [1] TRUE
## 
## [[3]]
## [1] 1 2 3
## 
## $name
## [1] "Clair"
## 
## $married
## [1] FALSE
# Brisanje elemenata liste:
x[["age"]] <- NULL
str(x)
## List of 5
##  $        : num 2.5
##  $        : logi TRUE
##  $        : int [1:3] 1 2 3
##  $ name   : chr "Clair"
##  $ married: logi FALSE
x$married <- NULL
str(x)
## List of 4
##  $     : num 2.5
##  $     : logi TRUE
##  $     : int [1:3] 1 2 3
##  $ name: chr "Clair"

Podatkovni okvir:

Okvir podataka je dvodimenzionalna struktura podataka u programskom okruženju R. Specijalni slučaj liste komponeneta jednake duljine. Svaka komponenta čini stupac, a sadržaj komponente čini retke.

Kreiranje podatkovnog okvira:

a <- c(1,21)
b <- c(2,1)
c<-c("John","Dora")
x <- data.frame(a,b,c)
x
##    a b    c
## 1  1 2 John
## 2 21 1 Dora
colnames(x) <- c("SN","Age","Name")
x
##   SN Age Name
## 1  1   2 John
## 2 21   1 Dora
typeof(x)    # data frame is a special case of  list
## [1] "list"
class(x)
## [1] "data.frame"
names(x)
## [1] "SN"   "Age"  "Name"
ncol(x)
## [1] 3
nrow(x)
## [1] 2
length(x)    # returns length of the list, same as ncol()
## [1] 3

Kreiranje podatkovnog okvira:

x <- data.frame("SN" = 1:2, "Age" = c(21,15), "Name" = c("John","Dora"))
str(x)    # structure podatkovnog okvira x
## 'data.frame':    2 obs. of  3 variables:
##  $ SN  : int  1 2
##  $ Age : num  21 15
##  $ Name: chr  "John" "Dora"
x
##   SN Age Name
## 1  1  21 John
## 2  2  15 Dora
x <- data.frame("SN" = 1:2, "Age" = c(21,15), "Name" = c("John", "Dora"), stringsAsFactors = FALSE)
str(x)    # now the third column is a character vector
## 'data.frame':    2 obs. of  3 variables:
##  $ SN  : int  1 2
##  $ Age : num  21 15
##  $ Name: chr  "John" "Dora"
x
##   SN Age Name
## 1  1  21 John
## 2  2  15 Dora

Kako dohvatiti komponente podatkovnog okvira?

x["Name"]
##   Name
## 1 John
## 2 Dora
x$Name
## [1] "John" "Dora"
x[["Name"]]
## [1] "John" "Dora"
x[[3]]
## [1] "John" "Dora"

Dohvat podataka u obliku matrice:

str(trees)
## 'data.frame':    31 obs. of  3 variables:
##  $ Girth : num  8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
##  $ Height: num  70 65 63 72 81 83 66 75 80 75 ...
##  $ Volume: num  10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
head(trees,n=3)
##   Girth Height Volume
## 1   8.3     70   10.3
## 2   8.6     65   10.3
## 3   8.8     63   10.2
trees[2:3,]    # select 2nd and 3rd row
##   Girth Height Volume
## 2   8.6     65   10.3
## 3   8.8     63   10.2
trees[trees$Height > 82,]    # selects rows with Height greater than 82
##    Girth Height Volume
## 6   10.8     83   19.7
## 17  12.9     85   33.8
## 18  13.3     86   27.4
## 31  20.6     87   77.0
trees[10:12,2]
## [1] 75 79 76
trees[10:12,2, drop = FALSE]
##    Height
## 10     75
## 11     79
## 12     76
# Modifikacija podataka u podatkovnom okvru:
x
##   SN Age Name
## 1  1  21 John
## 2  2  15 Dora
x[1,"Age"] <- 20; x
##   SN Age Name
## 1  1  20 John
## 2  2  15 Dora

Dodavanje komponenata:

y<- rbind(x,list(1,16,"Paul"))
y
##   SN Age Name
## 1  1  20 John
## 2  2  15 Dora
## 3  1  16 Paul
z<- cbind(x,State=c("NY","FL"))
z
##   SN Age Name State
## 1  1  20 John    NY
## 2  2  15 Dora    FL
x
##   SN Age Name
## 1  1  20 John
## 2  2  15 Dora
x$State <- c("NY","FL"); x
##   SN Age Name State
## 1  1  20 John    NY
## 2  2  15 Dora    FL
x
##   SN Age Name State
## 1  1  20 John    NY
## 2  2  15 Dora    FL

Brisanje komponeneta:

x$State <- NULL
x
##   SN Age Name
## 1  1  20 John
## 2  2  15 Dora
x <- x[-1,]
x
##   SN Age Name
## 2  2  15 Dora

5. Interpretacija rezultata s komentarom uspješnosti

6. Zaključak