Cvičenie 3 - Práca s knižnicou dplyr
Cieľom tretieho cvičenia je práca s dátovými rámcami pomocou klnižnice dplyr
. Uvedené príkazy sa často využívajú v procese predspracovania dát.
Balík dplyr
je jedným z najpopupárnejších balíkov v R. V tejto časti sa pozrieme na niekoľko
príkladov a tipov ako používať knižnicu dplyr
na čistenie a trasformáciu dát. Pre inštaláciu zadajte
install.packages("dplyr")
a načítajte knižnicu pomocou nasledujúceho príkazu:
library(dplyr)
Základné kombinácie dvoch tabuliek¶
#__________________ variables __________________________________________
df1 = data.frame(ID = c(1, 2, 3, 4, 5),
w = c('a', 'b', 'c', 'd', 'e'),
x = c(1, 1, 0, 0, 1),
y = rnorm(5),
z = letters[1:5])
df2 = data.frame(ID = c(1, 7, 3, 6, 8),
a = c('z', 'b', 'k', 'd', 'l'),
b = c(1, 2, 3, 0, 4),
c = rnorm(5),
d = letters[2:6])
inner_join(df1, df2, by = "ID")
left_join(df1, df2, by = "ID")
right_join(df1, df2, by = "ID")
#___________________________ cases __________________________________________
x=c(1,2)
y=c(2,3)
intersect(x, y)
union(x, y)
setdiff(x, y)
#__________________ bind cols/rows __________________________________________
df1=data.frame(ID = 1:6, x=letters[1:6])
df1
df2=data.frame(ID = 7:12, x=letters[7:12])
df2
bind_rows(df1,df2) # ekvivalent xy = rbind(df1,df2)
bind_cols(df1,df2) # ekvivalent xy = cbind(df1,df2)
V nasledujúcich úlohách budeme využívať dáta, o fiktívnych príjmoch rôznych štátov od roku 2002 do 2015. Tento dataset obsahuje 51 riadkov (pozorovaní) a 16 stĺpcov (premenných).
Dataset si načitajte pomocou nasledujúceho kódu:
dataset = read.csv("https://raw.githubusercontent.com/deepanshu88/data/master/sampledata.csv")
Pri riešení jednotlivých úloh sa budeme stretávať s týmito logickými operátormi:
Operátor | Popis |
---|---|
== |
Rovná sa |
%in% |
Výber viacerých položiek |
& |
logický operátor AND |
| |
logický operátor OR |
! |
negácia NOT |
1. Manipulate Cases¶
Nasledujúca tabuľka obsahuje základné funkcie na prácu s riadkami:
Funkcia | Popis |
---|---|
select_n(dataframe,n) |
Náhodný výber n riadkov |
select_frac(dataframe,n) |
Náhodný výber n % riadkov, n zadávame ako desatinné číslo |
distict(daframe, variables , .keep_all) |
Odstránenie duplikátov:
|
filter(dataframe, logical conditions) |
Výber podmnožiny údajov (riadkov) so zodpovedajúcimi logickými podmienkami |
slice() |
Výber riadkov podľa polohy |
arrange(dataframe, variable(s)_to_sort) |
Zoradenie údajov |
Príklady:¶
sample_n(dataset, 3)
sample_frac(dataset, 0.1)
distinct(dataset)
distinct(dataset, Index, .keep_all= TRUE)
distinct(dataset, Index, .keep_all= FALSE)
filter(dataset, Index == "A")
filter(dataset, Index %in% c("A", "C"))
filter(dataset, !Index %in% c("A", "C"))
filter(dataset, Index %in% c("A", "C") & Y2002 >= 1300000 )
filter(dataset, Index %in% c("A", "C") | Y2002 >= 1300000)
slice(dataset,3:10)
arrange(dataset,Y2011)
arrange(dataset, desc(Y2011))
2. Manipulate Variables¶
Nasledujúca tabuľka obsahuje základné funkcie na prácu s atribútmi/stĺpcami:
Funkcia | Popis |
---|---|
select(dataframe, variables) |
Výber požadovaných atribútov:
|
select_if(dataframe, condition) |
Podmienený výber atribútov |
mutate(dataframe, expression(s)) |
Vytvorenie nového atribútu |
mutate_all(dataframe, expression(s)) |
Vytvorenie nových n atribútov z pôvodných n atribútov, aplikovaním vybraného výrazu |
mutate_if(dataframe, condition, expression(s)) |
Podmienené vytvorenie nových atribútov |
mutate_at(dataframe, variables, expression(s)) |
Vytvorenie nových atribútov, aplikovaním výrazu na povodné atribúty |
rename() |
Premenovanie atribútu |
Príklady:¶
select(dataset, Index, State:Y2008)
select(dataset, -Index, -State)
select(dataset, starts_with("Y"))
select(dataset, -starts_with ("Y"))
select(dataset, contains("St"))
select(dataset, State, everything())
select_if(dataset, is.numeric)
select_if(dataset, is.factor)
mutate(dataset, new=Y2015/Y2014)
mutate_all(dataset, funs("new" = .* 1000))
mutate_if(dataset, is.numeric, funs("new" = .* 1000))
mutate_at(dataset, vars(Y2008:Y2010), funs(Rank=min_rank(.)))
mutate_at(dataset, vars(Y2008:Y2010), funs(Rank=min_rank(desc(.))))
rename(dataset, Zac.pismeno=Index)
3. Summarise Cases¶
Mnoho úloh v oblasti analýzy dát sa dá vyjadriť pomocou paradigmy split-apply-combine = rozdeliť-použiť-skombinovať: rozdeliť údaje do skupín, použiť určitú analýzu pre každú skupinu a potom skombinovať výsledky.
dplyr
ponúka group_by()
funkciu, ktorá rozdeľuje dáta do skupín.
Ak sú dáta zoskupené týmto spôsobom, je možné použiť summarize()
na vyvorenie jednoriadkového súhrnu z každej skupiny.
Funkcia summarize()
použije pre každú skupinu agregačnú alebo súhrnnú funkciu.
Funkcia | Popis |
---|---|
group_by(dataframe, variables |
Zoskupi dáta avšak nezmení spôsob zobrazenia údajov |
summarize(dataframe, summary function) |
Sumarizácia, agregácia údajov |
summarize_at(dataframe, variables, summary function) |
Sumarizácia viacrých premenných, výber podľa ich názvu |
summarize_if(dataframe, condition, summary function) |
Podmienená sumarizácia, summarizuje premenné vybrané pomocou zadanej podmienky |
summarize_all(dataframe, summary function) |
Sumarizuje všetky atribúty |
summarise(dataset, mean(Y2015), median(Y2015))
summarise_at(dataset, vars(Y2005, Y2006), funs(n(), mean, median))
summarise_at(dataset, vars(Y2005, Y2006), list(~n(), ~mean(.), ~median(.)))
summarise_if(dataset, is.numeric, funs(n(),mean,median))
summarise_all(dataset["Index"], funs(nlevels(.), nmiss=sum(is.na(.))))
4. Pipe Operator %>%
syntax¶
Pipe operátor je nástrojom pre ľahko čitateľné vyjadrenie postupnosti viacerých operácií. Vďaka pipe operátoru voláme jednotlivé operácie reťazovo. Jednoducho povedané, pipe operátor nám umožňuje preniesť priebežný výsledok na ďalšiu funkciu.
Kód v jazyku R často obsahuje mnoho zátvoriek, čím sa stáva neprehľadným. Pipe operátor vytvorí zo zložitých operácií čitateľný a zrozumiteľný kód. Ďalšou výhodou je, že sa môžete vyhnúť vnoreným volaniam, minimalizujete potrebu vnorených premenných a definicií funkcií a zároveň vám uľahčí pridávanie krokov kdekoľvek do postupnosti operácií.
Aj jednoduchú funckiu ako log(x)
vieme prepísať ako x %>% log()
. Princíp si ukážeme na nasledujúcich príkladoch:
sample_n(select(dataset, Index, State),10)
# or
dataset %>%
select(Index, State) %>%
sample_n(10)
summarise_at(group_by(dataset, Index), vars(Y2011, Y2012), funs(n()))
# or
dataset %>%
group_by(Index) %>%
summarise_at(vars(Y2011:Y2012), funs(n()))
# function do()
dataset %>%
filter(Index %in% c("A", "C","I"))%>%
group_by(Index) %>%
do(head( . , 2))
dataset %>%
select(Index, Y2015) %>%
filter(Index %in% c("A", "C","I")) %>%
group_by(Index) %>%
do(arrange(.,desc(Y2015)))
dataset %>%
select(Index, Y2015) %>%
filter(Index %in% c("A", "C","I")) %>%
group_by(Index) %>%
do(arrange(.,desc(Y2015))) %>%
slice(3)
dataset %>%
group_by(Index) %>%
filter(min_rank(desc(Y2015)) == 1) %>%
select(Index, State, Y2015)
Úlohy
Úloha 3.1
Z dát mtcars zobrazte počet automobilov pre každú hodnotu cyl (počet valcov) a usporiadajte zostupne.
Úloha 3.2
Vypočítajte podiel všetkých ulovených rýb v každom mesiaci. Dataset > RuffeSLRH92. Vykonajte tieto kroky:
install.packages("FSAdata")
library(FSAdata)
- zoskupenie údajov podľa mesiacov,
- zhrnutie počtu ulovených rýb v každom mesiaci,
- pridania novej premennej, ktorá je pomerom celkovej hodnoty úlovok v každom mesiaci,
- triedenie výsledkov tak, aby bol ako prvý uvedený mesiac s najväčším úlovkom.
Výsledok:
## month n priemer ## 1 7 182 0,24661 ## 2 6 154 0,20867 ## 3 9 126 0,17073 ## 4 8 79 0,10705 ## 5 10 69 0,09350 ## 6 5 66 0,08943 ## 7 4 62 0,08401
Úlohy na precvičenie
Úloha 3.3
1. Načítajte si CSV data z URL: https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv
2. Vyberte stĺpce GoingTo a DayOfWeek
3. Odfiltrujte dáta, aby ste dostali iba výsledky s hodnotami Home a Wednesday
4. Zobrazte iba prvých 10 riadkov.
Úloha 3.4
1. Načítajte si CSV data z URL: https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv
2. Vyberte všetky stĺpce okrem Comments
3. Usporiadajte výsledok podľa stĺpcov Home a Distance
4. Zobrazte iba posledných 5 riadkov.