SZKOLENIE WPROWADZENIE DO R UNIWERSYTET SZCZECIŃSKI al. Papieża Jana Pawła II nr 22a 70-453 Szczecin 2 Lp. Temat Numer części materiałów 1 Język R oraz środowisko RStudio 1 2 Składnia języka 3 3 Podstawowe operacje 3 4 Obiekty i ich atrybuty 3 5 Tablice i macierze 3 6 Listy 3 7 Zarządzenie danymi 2 8 Zarządzanie pakietami 1 1
ZARZĄDZANIE DANYMI 1. Przygotowaniu danych w programie zewnętrznym (format danych.csv): Arkusz kalkulacyjny MS Excel a) wprowadzić dane statystyczne do Arkusza kalkulacyjnego programu MS Excel: b) zapisać dane w formacie csv na dysku: dane_atrakcyjnosc_2012a.csv W poniższym oknie wybrać Tak 2
Arkusz kalkulacyjny programu LibreOffice a) wprowadzić dane statystyczne do Arkusza kalkulacyjnego programu LibreOffice: b) zapisać dane w formacie csv na dysku: dane_atrakcyjnosc_2012b.csv 3
2. Wczytanie danych tekstowych csv (comma separated values) i ich wyświetlenie na ekranie Zadanie 1 Po uruchomieniu programu R informujemy poleceniem File Change dir (Plik Zmień katalog ) o katalogu (folderze), w którym znajduje się plik (pliki) z danymi i ewentualne skrypty (uruchamiane w trybie wsadowym). wczytanie danych do programu R x<-read.csv2("car.csv",header=true,row.names=1) options(outdec=",") wyświetlenie na ekranie wczytanych danych print(x) Ten krok nie jest konieczny, a służy tylko weryfikacji poprawności importu danych. W większości projektów laboratoryjnych instrukcja wczytywania danych jest częścią skryptu (procedury analitycznej zawartej w pliku.r). Wyświetlenie danych będzie konieczne wtedy, gdy wywołanie procedury zakończy się błędem, w celu stwierdzenia, czy dane zostały załadowane prawidłowo i ewentualnie poprawienia danych. Zadanie 2 Błędnie wprowadzone dane (zbędna spacja w poz. A12) Wczytanie danych do programu R z1<-read.csv2("car_bad.csv",header=true,row.names=1) options(outdec=",") Wyświetlić na ekranie wczytane dane print(z1) Opel 1500 95 7,5 65,5 Ford 1300 70 9,3 58,2 Audi 2000 130 10,0 83,1 BMW 1800 145 9,8 88,9 Honda 1500 115 7,9 72,1 Toyota 1600 110 7,6 74,2 Skoda 1350 80 7,2 56,8 Volkswagen 1650 125 8,5 69,8 Mercedes 2000 150 9,9 102,6 Renault 1100 75 6,8 49,2 NA NA NA NA Obliczam dla poszczególnych zmiennych średnie arytmetyczne: sapply(z1,mean) NA NA NA NA 4
Zadanie 3 Błędnie wprowadzone dane (kropka zamiast przecinka) Wczytanie danych do programu R z2<-read.csv2("car_bad1.csv",header=true,row.names=1) options(outdec=",") Wyświetlić na ekranie wczytane dane print(z2) Opel 1500 95 7,5 65,5 Ford 1300 70 9,3 58,2 Audi 2000 130 10 83,1 BMW 1800 145 9.9 88,9 Honda 1500 115 7,9 72,1 Toyota 1600 110 7,6 74,2 Skoda 1350 80 7,2 56,8 Volkswagen 1650 125 8,5 69,8 Mercedes 2000 150 9,9 102,6 Renault 1100 75 6,8 49,2 Obliczam dla poszczególnych zmiennych średnie arytmetyczne: sapply(z2,mean) 1580,00 109,50 NA 72,04 Komunikat ostrzegawczy: In mean.default(x[[3l]],...) : argument nie jest wartością liczbową ani logiczną: zwracanie wartości NA Zadanie 4 Błędnie wprowadzone dane (zbędne spacje w Excelu użyj separatora) Wczytanie danych do programu R z3<-read.csv2("car_bad2.csv",header=true,row.names=1) options(outdec=",") 5
Wyświetlić na ekranie wczytane dane print(z3) Opel 1 500 95 7,5 65,5 Ford 1 300 70 9,3 58,2 Audi 2 000 130 10,0 83,1 BMW 1 800 145 9,9 88,9 Honda 1 500 115 7,9 72,1 Toyota 1 600 110 7,6 74,2 Skoda 1 350 80 7,2 56,8 Volkswagen 1 650 125 8,5 69,8 Mercedes 2 000 150 9,9 102,6 Renault 1 100 75 6,8 49,2 Obliczam dla poszczególnych zmiennych średnie arytmetyczne: sapply(z3,mean) NA 109,50 8,46 72,04 Komunikat ostrzegawczy: In mean.default(x[[1l]],...) : argument nie jest wartością liczbową ani logiczną: zwracanie wartości NA 3. Wczytywanie danych z pakietów Wczytanie danych z pakietu jest proste. Należy włączyć pakiet poleceniem library a następnie użyć funkcji data() library(clustersim) data(data_patterngdm2) Do wyświetlenia na ekranie roboczym służy polecenie print(data_patterngdm2) a w edytorze danych polecenie: fix(data_patterngdm2) Do wyświetlenia na ekranie roboczym w RStudio służy polecenie: View(data_patternGDM2) a do edycji: edit(data_patterngdm2) 6
4. Łączenie i filtrowanie zbiorów danych w R merge() złączenie dwóch zbiorów według zawartości pól inner_join() złączenie z zachowaniem kolejności (pakiet dplyr) filter() filtrowanie zawartości według pola arrange() sortowanie według pola (pól) %>% połączenie operacji filtrowania i sortowania w potok (wymaga pakietu magrittr) %in% przy filtrowaniu operator zawierania elementu w innym zbiorze Przykład 1 library(cardata) library(dplyr) library(magrittr) data("salaries") print(salaries) # wyświetl tylko wykładowców dyscypliny A a<-filter(salaries, discipline=="a") print(a) # tylko mężczyzn b<-filter(a, sex=="male") print(b) # pracujących więcej niż 15 lat c<-filter(b, yrs.service>15) print(c) # posortowanych malejąco wg wynagrodzeń d<-arrange(c,-salary) print(d) # Wszystkie powyższe połączone w jedno polecenie (przetwarzanie potokowe) d<-salaries %>% filter(discipline=="a") %>% filter(sex=="male") %>% filter(yrs.service>15) %>% arrange(-salary) print(d) 7
Przykład 2 Zbiory danych band_members i band_instruments są ładowane automatycznie z pakietem dplyr library(dplyr) print(band_members) print(band_instruments) # łączenie zbiorów wg kolumny "name" band<-band_members %>% inner_join(band_instruments,by="name") print(band) # łączenie zbiorów wg kolumn o różnych nazwach: "name" o " print(band_instruments2) band<-band_members %>% inner_join(band_instruments2,by=c("name"="artist")) print(band) Przykład 3 Wczytaj dane diamonds z pakietu ggplot2 i wyświetl diamenty powyżej 1 karata o skali czystości (clarity) VVS1 albo IF, kolorze E lub D posortowane wg ceny. Do wyświetlenia użyj konstrukcji %>% View() lub print() library(ggplot2) library(dplyr) print(diamonds,n=100) diamonds%>%filter(carat>1)%>% filter(color=="e" color=="d") %>% filter(clarity %in% c("vvs1","if"))%>% arrange(price) %>% View() diamonds%>%filter(carat>1)%>% filter(color=="e" color=="d") %>% filter(clarity %in% c("vvs1","if"))%>% arrange(price) %>% print(n=200) Przykład 4 Z załączonych zbiorów join1.csv i join2.csv utwórz jeden zbiór danych połączony według PESEL, ale w kolejności oryginalnej wg pierwszego zbioru: j1<-read.csv2("join1.csv",header = T) j2<-read.csv2("join2.csv",header = T) 8
j<-inner_join(j1,j2,by="pesel") j<- j1 %>% inner_join(j2,by="pesel") print(j) Powinniśmy otrzymać: Imie Nazwisko Pesel Dział Stanowisko Jan Duda 91041957778 Budowlany Sprzedawca Adrian Kowalski 96120556257 Ceramika Kasjer Stefan Nowak 66110694195 Remonty Sprzedawca Antoni Maruszenko 44012723551 Remonty Sprzedawca Michał Wiśniewski 94020772898 Remonty Starszy specjalista Adama Zębik 12242137715 Budowlany Kasjer 9