TRUE # odpowiednik `True` z Pythona FALSE # odpowiednik `False` z Pythona T # zamiast pełnego TRUE możemy używać skrótu F # j.w. prawda <- TRUE # przypisujemy wartość do zmiennej trzy_prawdy <- c(T, T, T) # w R wszystkie podstawowe typy danych są wektorowe, to znaczy są n-tkami wzrost <- c(183, 171, 171) class(wzrost) # `type` w Pythonie, mimo że nie ma liczb po przecinku to ma typ `numeric`! wzrost_int <- as.integer(wzrost) # funkcje z `as` na początku pozwalają konwertować między typami 3:7 # tworzy wektor typu `integer` z sekwencją liczb od 3 do 7 class(3:7) # sprawdzamy typ imiona <- c("Hanna", "Adam", "Jędrzej") # tworzy wektor typu `character` (odpowiednik stringa) plec <- c("K", "K", "M", "K", "I") table(plec) # tabulacja (proszę sprawdzić jakiego typu wartość zwraca) plec_2003 <- c("M", "M", "M", "M", "I") table(plec_2003) plec_2003_fct <- factor(plec_2003, levels = c("K", "M", "I")) # factor to `character` z informacją o możliwych poziomach table(plec_2003_fct) # pokazuje prawidłowo 0 kobiet imiona[1:2] # indeksujemy podobnie jak w Pythonie imiona[c(1,2)] # ale możemy dać w nawiasach kwadratowych dowolne integery! imiona[c(1,3)] # jakie nam się wymarzy! imiona[1:3] ?seq # sluzy do generowania sekwencji # znak zapytania = dostęp do dokumentacji # matrix od_jeden_do_dwadziescia <- 1:20 jeden_dwadziescia <- matrix(od_jeden_do_dwadziescia, 5, 4) # wiersze - pierwsze, kolumny - drugie jeden_dwadziescia jeden_dwadziescia <- matrix(od_jeden_do_dwadziescia, 5, 4, byrow = T) # byrow = T sprawia, że macierz wypełniana jest wierszami nie kolumnami jeden_dwadziescia[4,3] # czwarty wiersz trzecia kolumna jeden_dwadziescia[2:3,1:2] # zakresy działają tak samo jak w przypadku wektorów! waga <- c(74.3, 102.4, 81, 66, 45.8, 68.9) waga waga[c(4, 5, 6)] # wartości mniejsze niż 70, ale tak nie chcemy! waga < 70.0 # zwraca wektor typu `logical` gdzie T jest na pozycjach, dla których w `waga` warunek jest spełniony which(waga < 70.0) # zwraca pozycje, gdzie jest T waga[which(waga < 70.0)] # których możemy użyć do indeksowania waga[waga < 70.0] # możemy też użyć do indeksowania po prostu wektora typu `logical` waga[c(F, F, F, T, T, T)] # to nie jest żadna specjalna składnia, możemy tam wstawić wpisany z palca wektor waga[length(waga)] # `length` zwraca długość, odpowiednik `len` w Pythonie # Jeden ze sposobów stworzenia ramki danych: statystyka <- data.frame( imie = c("Hanna", "Adam", "Jędrzej", "Sabina"), plec = c("K", "M", "M", "K"), ocena = c(5, 4, 3, 5) ) statystyka # wyświetlamy całą ramkę danych statystyka$plec == "M" # za pomocą dolara wybieramy pojedynczą kolumnę z ramki statystyka[statystyka$plec == "M",] # indeksowanie działa dokładnie tak jak w macierzach, pamiętamy o przecinku! # Sześć sposobów wybrania kolumny `ocena` statystyka$ocena # zwraca wektor statystyka[3] # zwraca jednokolumnową ramkę danych statystyka[[3]] # zwraca wektor statystyka[, 3] # zwraca wektor statystyka[, "ocena"] # zwraca wektor statystyka[["ocena"]] # zwraca wektor # Wybrać te samochody, # które mają więcej niż 100 koni i 4 cylindry mtcars[mtcars$hp > 100 & mtcars$cyl == 4,] # wybrać z tego podzbioru tylko kolumnę "gear" mtcars[mtcars$hp > 100 & mtcars$cyl == 4, "gear"]