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