x <- 3.14
typeof(x)
## [1] "double"
class(x)
## [1] "numeric"
#rnica midzy tym polega na tym że typeof(), zwraca niskopoziomy wewnętrzny typ danych (czyli tak obijekt jest przechowywany w R), a class zwraca bardziej "użytkowy" typ obijektu czyli jego clasę
typeof(F)
## [1] "logical"
class(F)
## [1] "logical"
typeof("abc")
## [1] "character"
class("abc")
## [1] "character"
#konwersja typów
y <- as.integer(3.14)
y
## [1] 3
z <- as.character(3.14)
z
## [1] "3.14"
typeof(z)
## [1] "character"
typeof(5L)
## [1] "integer"
w <- typeof(5L)
w
## [1] "integer"
typeof(w)
## [1] "character"
t <- as.logical(0)
t
## [1] FALSE
k <- as.logical(5)
as.integer("abc") #NA not awaileble - brak danych spowodaany brakiem możliwostej konwersji
## Warning: NAs introduced by coercion
## [1] NA
# lączenie tekstu
first_name <- "Jan"
last_name <- "kowalski"
full_name <- paste(first_name, last_name)
full_name
## [1] "Jan kowalski"
#paste - łączy argumenty w jedną wartość dodając opcjonalnie separator, domyślnie jest to spacja
full_name_1 <- paste(first_name, last_name, sep = "_")
full_name_1
## [1] "Jan_kowalski"
sprintf("%s ma %d złotych", first_name, 100)
## [1] "Jan ma 100 złotych"
#specyfikatory formatu: %s - tekst, %d liczba
#tworzymy macierz złożoną z 3 wierszy i 2 kolumny 
B <- matrix(c(2,3,4,5,6,7), nrow = 3, ncol = 2)
B
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6
## [3,]    4    7
#Pobranie wartości z pierwszego wiersza i drugiej kolumny 
B[1,2] #numer wiersza numer kolumny
## [1] 5
#pobranie wartości z trzeciego wierszu
B[3,]
## [1] 4 7
#pobranie waryości z 2 kolumny
B[,2]
## [1] 5 6 7
#oaoaoaoaoaoaoaooaoaoaoaoaoaoaoaoaoaooaoaoaoaoaoaoaoaoaoao
#OPERACJE NA MACIERZACH
#transpozycja macierzy
B
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6
## [3,]    4    7
t(B)
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    5    6    7
#wymiar macierzy
dim(B) #dimention,,, I wartoci - liczba wierszy, II - liczba kolumn
## [1] 3 2
# Lączenie macierzy 
C <- matrix(c(7,8,9), nrow = 3, ncol = 1)
C
##      [,1]
## [1,]    7
## [2,]    8
## [3,]    9
B
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6
## [3,]    4    7
#sklejamy C i B kolumnowo
cbind(C,B)
##      [,1] [,2] [,3]
## [1,]    7    2    5
## [2,]    8    3    6
## [3,]    9    4    7
E <- matrix(c(8,9), nrow = 1, ncol = 2)
E
##      [,1] [,2]
## [1,]    8    9
B
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    6
## [3,]    4    7
#sklejamy e i b wierszowo
rbind(E,B)
##      [,1] [,2]
## [1,]    8    9
## [2,]    2    5
## [3,]    3    6
## [4,]    4    7
#Lista 
#Listy to ciągi elementów o dowolnych typach i dowolnych długościach
n <- c(2,3,5)
s <- c("aa", "bb", "cc", "dd")
b <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
L <- list(n,s,b,4)
L
## [[1]]
## [1] 2 3 5
## 
## [[2]]
## [1] "aa" "bb" "cc" "dd"
## 
## [[3]]
## [1]  TRUE FALSE  TRUE FALSE FALSE
## 
## [[4]]
## [1] 4
typeof(L)
## [1] "list"
class(L)
## [1] "list"
#pobranie wlementu z listy
#[], zwraca element listy jako podlistę 
L[2]
## [[1]]
## [1] "aa" "bb" "cc" "dd"
typeof(L[2])
## [1] "list"
#[[]], zwraca element listy jako podwójny element (np. wektor)
L[[2]]
## [1] "aa" "bb" "cc" "dd"
typeof(L[[2]])
## [1] "character"
L[c(1,3)] # zwraca podliste zawierające elementy 1 i 3
## [[1]]
## [1] 2 3 5
## 
## [[2]]
## [1]  TRUE FALSE  TRUE FALSE FALSE
typeof(L[c(1,3)])
## [1] "list"
#хочу додому :(
# zwraca 2 element z drugiego wektora listy
L[[2]][2]
## [1] "bb"
# zwraca 3 element z pierwszego elementa listy
L[[2]][3]
## [1] "cc"
#Zmiana wartości elementu wektora
L[[2]][2] <- "zz"
L
## [[1]]
## [1] 2 3 5
## 
## [[2]]
## [1] "aa" "zz" "cc" "dd"
## 
## [[3]]
## [1]  TRUE FALSE  TRUE FALSE FALSE
## 
## [[4]]
## [1] 4
s
## [1] "aa" "bb" "cc" "dd"
#nie wpływa na wartość s poniważ L zawiera kopie wektora s, a nie jego oryginal
#Data frame - ramka danych
#ramka danych to lista wektorów o jednakowej długości
df <- data.frame(name = c("Anna", "Jan", "krzysztof"), age = c(25, 30, 35), employed = c(TRUE, FALSE, TRUE))
typeof(df)
## [1] "list"
class(df)
## [1] "data.frame"
#head(iris) #zwraca pierwsze 6 wierszy i nagłówki
#tail(iris) #zwraca ostatie 6 wierszy i nagłówki
#iris[[3]] #zwraca 3 kolumne ramki danych
#druga metoda
#iris[["Petal.lenghts"]]
#trzecia metoda (korzystając z nazwy kolumny i $)
#iris$Sepal.Length
#4, korzystanie z dwuwyniarowych indeksów jak w macierzaach
#iris[, "Petal.length"]
#iris[,3]
#[], daje nam podlistę (podramkę danych)
#iris[3]
#typeof(iris[3])
#class(iris[3])
#iris["Petal.Length"]
#typeof(iris["Petal.Length"])
# Podlista utworzona z dwoch kolumn listy
#iris[c("Petal.Length", "Petal.Width")]
#aby wydobyć elementy z ramki danych używamy podwójnego indeksowania jak w macierzach
#iris[4,]
#typeof(iris[4,])
# wydobywamy wiersz 1 i 3
#iris[c(1,3)]
#Zadanie 1. Stwórz zmienną typu numeric, a następnie przekonwertuj ją na integer, character oraz logical.

x <- 3.14
class(x)
## [1] "numeric"
typeof(F)
## [1] "logical"
class(F)
## [1] "logical"
typeof("abc")
## [1] "character"
class("abc")
## [1] "character"
#Zadanie 2. Utwórz dwie zmienne liczbowe i sprawdź, czy są równe, większe lub mniejsze od siebie.


x = 1; y = 2
z = x > y
z
## [1] FALSE
x = 1; y = 2
z = x = y
z
## [1] 2
x = 1; y = 2
z = x < y
z
## [1] TRUE
#Zadanie 3. Połącz imię i nazwisko oraz dodaj wiek do napisu, korzystając z paste() i sprintf().

first_name <- "Michał"
last_name <- "Boiko"
full_name <- paste(first_name, last_name)
full_name
## [1] "Michał Boiko"
full_name_1 <- paste(first_name, last_name, sep = "_")
full_name_1
## [1] "Michał_Boiko"
sprintf("%s ma %d lat", first_name, 18)
## [1] "Michał ma 18 lat"
#Zadanie 4. Utwórz macierz o wymiarach 4x3 z dowolnymi wartościami. Znajdź jej transpozycję. Sprawdź jej wymiary.

C <- matrix(c(7,8,9,1,3,4), nrow = 4, ncol = 3)
C
##      [,1] [,2] [,3]
## [1,]    7    3    9
## [2,]    8    4    1
## [3,]    9    7    3
## [4,]    1    8    4
t(C)
##      [,1] [,2] [,3] [,4]
## [1,]    7    8    9    1
## [2,]    3    4    7    8
## [3,]    9    1    3    4
dim(C)
## [1] 4 3
#Zadanie 5. Stwórz dwie macierze 2x5 i połącz je wierszowo oraz kolumnowo.
B = matrix( 
   c(2, 4, 3, 1, 5), 
   nrow=2, 
   ncol=5)

D = matrix( 
  c(7, 4, 2, 4, 6), 
  nrow=2, 
  ncol=5)
D
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    7    2    6    4    4
## [2,]    4    4    7    2    6
cbind(B, D)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]    2    3    5    4    1    7    2    6    4     4
## [2,]    4    1    2    3    5    4    4    7    2     6
#Zadanie 6. Stwórz macierz 3x3 i zwróć wartość z drugiego wiersza i trzeciej kolumny

B = matrix( 
   c(2, 4, 3), 
   nrow=3, 
   ncol=3)
B
##      [,1] [,2] [,3]
## [1,]    2    2    2
## [2,]    4    4    4
## [3,]    3    3    3
B[2,3]
## [1] 4
#Zadanie 7. Utwórz listę o nazwie moja_lista, która będzie zawierać:
#Wektor liczb całkowitych: 10, 20, 30
#Wektor tekstowy: “Ala”, “ma”, “kota”
#Wektor wartości logicznych: TRUE, FALSE, TRUE

n = c(10,20,30)
s = c("Ala", "ma", "kotka")
b = c(TRUE, FALSE, TRUE)
x = list(n, s, b, 3)
x
## [[1]]
## [1] 10 20 30
## 
## [[2]]
## [1] "Ala"   "ma"    "kotka"
## 
## [[3]]
## [1]  TRUE FALSE  TRUE
## 
## [[4]]
## [1] 3
#Zadanie 8. Sprawdź zawartość trzeciego elementu listy oraz jego typ danych.

x[[3]]
## [1]  TRUE FALSE  TRUE
class(x[[3]])
## [1] "logical"
#Zadanie 9. Zmień pierwszy element wektora tekstowego w liście moja_lista z “Ala” na “Ola” i wyświetl całą listę.

x[[2]][1] = "Ola"
x[[2]]
## [1] "Ola"   "ma"    "kotka"
#Zadanie 10. Ze zbioru iris pobierz wektor wartości czwartej kolumny

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 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
iris[[4]]
##   [1] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 0.2 0.2 0.1 0.1 0.2 0.4 0.4 0.3
##  [19] 0.3 0.3 0.2 0.4 0.2 0.5 0.2 0.2 0.4 0.2 0.2 0.2 0.2 0.4 0.1 0.2 0.2 0.2
##  [37] 0.2 0.1 0.2 0.2 0.3 0.3 0.2 0.6 0.4 0.3 0.2 0.2 0.2 0.2 1.4 1.5 1.5 1.3
##  [55] 1.5 1.3 1.6 1.0 1.3 1.4 1.0 1.5 1.0 1.4 1.3 1.4 1.5 1.0 1.5 1.1 1.8 1.3
##  [73] 1.5 1.2 1.3 1.4 1.4 1.7 1.5 1.0 1.1 1.0 1.2 1.6 1.5 1.6 1.5 1.3 1.3 1.3
##  [91] 1.2 1.4 1.2 1.0 1.3 1.2 1.3 1.3 1.1 1.3 2.5 1.9 2.1 1.8 2.2 2.1 1.7 1.8
## [109] 1.8 2.5 2.0 1.9 2.1 2.0 2.4 2.3 1.8 2.2 2.3 1.5 2.3 2.0 2.0 1.8 2.1 1.8
## [127] 1.8 1.8 2.1 1.6 1.9 2.0 2.2 1.5 1.4 2.3 2.4 1.8 1.8 2.1 2.4 2.3 1.9 2.3
## [145] 2.5 2.3 1.9 2.0 2.3 1.8
#Zadanie 11. Ze zbioru iris pobierz informacje dla następujących przypadków : 7, 14, 20. Napisz interpretację otrzymanych wyników.

iris[c(7, 14, 20), ]
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 7           4.6         3.4          1.4         0.3  setosa
## 14          4.3         3.0          1.1         0.1  setosa
## 20          5.1         3.8          1.5         0.3  setosa