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
Prikazati rad s podacima u obliku matrica, listi i podatkovnog okvira.
Napisati i izvršiti R skriptu na zadanu temu.
rm(list=ls())
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
matrix(1:9, nrow=3, byrow=TRUE)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
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
colnames(x)
## [1] "A" "B" "C"
rownames(x)
## [1] "X" "Y" "Z"
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
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
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"
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
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"
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
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
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
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
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 je podatkovna struktura sastavljena od mješovitih tipova podataka
Da li se radi o listi provjeravamo funkcijom: typeof() Duljinu liste provjeravamo funkcijom length()
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
x <- list(2.5,TRUE,1:3)
x
## [[1]]
## [1] 2.5
##
## [[2]]
## [1] TRUE
##
## [[3]]
## [1] 1 2 3
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"
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"
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.
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
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
x["Name"]
## Name
## 1 John
## 2 Dora
x$Name
## [1] "John" "Dora"
x[["Name"]]
## [1] "John" "Dora"
x[[3]]
## [1] "John" "Dora"
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
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
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