Baze mozemo spajati na vise nacina. U principu radi se o tome da od dvije postojece baze pravi novu bazu. tako mozemo 1. spajati bazu samo da “nalijepimo” horizontalno bazu 2. nalijepimo vertikalno bazu 3. izbacimo iz baze ono sto se ponavanja (zadrzavamo sta nije mecirano) 4. zadrzimo samo ono sto se ponavanja (meciramo)

1.importujemo baze

#ako je error za gornje kodove “Error: ’ used without hex digits in character string starting”C: - onda koristimo drugu kosu - zavisi od sistema u kojem radimo

2.osnovana analiza baza

Prije nego sto krenemo da se upoznamo sa njima

summary(T) 
##        ID               tezina      
##  Min.   :   25189   Min.   : 25.00  
##  1st Qu.:   70855   1st Qu.: 59.75  
##  Median :  216449   Median : 68.00  
##  Mean   : 3105262   Mean   : 82.40  
##  3rd Qu.: 3946029   3rd Qu.: 78.00  
##  Max.   :15413235   Max.   :183.00
dim(T)
## [1] 10  2
summary(S)
##        ID            Stanovanje       
##  Min.   :   15461   Length:18         
##  1st Qu.:   42572   Class :character  
##  Median :  154820   Mode  :character  
##  Mean   : 2261634                     
##  3rd Qu.: 1230960                     
##  Max.   :15884651
dim(S)
## [1] 18  2
summary(V)
##        ID              Gender              visina     
##  Min.   :   25189   Length:10          Min.   :128.0  
##  1st Qu.:   70855   Class :character   1st Qu.:158.0  
##  Median :  216449   Mode  :character   Median :176.0  
##  Mean   : 3105262                      Mean   :170.2  
##  3rd Qu.: 3946029                      3rd Qu.:185.0  
##  Max.   :15413235                      Max.   :200.0
dim(V)
## [1] 10  3
S$Stanovanje <- as.factor(S$Stanovanje)
V$Gender <- as.factor(V$Gender)

Mozemo ih i pregledati na ovaj način jer su malih dimenzija

T
## # A tibble: 10 × 2
##          ID tezina
##       <dbl>  <dbl>
##  1    25189     58
##  2    31298     66
##  3   281567     25
##  4   146541    183
##  5   151331    143
##  6 15413235     70
##  7  8664845     65
##  8    45626     58
##  9  1547425     78
## 10  4745564     78
S
## # A tibble: 18 × 2
##          ID Stanovanje
##       <dbl> <fct>     
##  1    41554 Sarajevo  
##  2    25189 Bihac     
##  3    15831 Travnik   
##  4    31298 Zenica    
##  5    15461 Cazin     
##  6 15413235 Krupa     
##  7   281567 Banja Luka
##  8   146541 Bijeljina 
##  9   151331 Mostar    
## 10  4745564 Neum      
## 11  1813224 Goražde   
## 12   158432 Pale      
## 13 15884651 Rogatica  
## 14   158310 Prijedor  
## 15    48735 Čapljina  
## 16   185431 Bugojno   
## 17  1547425 Bužim     
## 18    45626 Sarajevo
V
## # A tibble: 10 × 3
##          ID Gender visina
##       <dbl> <fct>   <dbl>
##  1  8664845 M         178
##  2    31298 F         128
##  3 15413235 M         200
##  4   151331 F         189
##  5  4745564 M         158
##  6    45626 M         158
##  7   281567 F         147
##  8   146541 F         174
##  9    25189 F         185
## 10  1547425 M         185

3.Dodavanje varijabli i observacija

‘bind_cols()’ samo lijepi horizontalno. Iako imamo iste ID-ijeve pod različitim nazivom

library(dplyr)  

bind <- bind_cols(T,V)#bind_cols(S,T) #ovaj kod ne moze jer su različite dužine
bind #kolone su samo naljepljene bez ikakvog spajanja preko neke varijable
## # A tibble: 10 × 5
##      ID...1 tezina   ID...3 Gender visina
##       <dbl>  <dbl>    <dbl> <fct>   <dbl>
##  1    25189     58  8664845 M         178
##  2    31298     66    31298 F         128
##  3   281567     25 15413235 M         200
##  4   146541    183   151331 F         189
##  5   151331    143  4745564 M         158
##  6 15413235     70    45626 M         158
##  7  8664845     65   281567 F         147
##  8    45626     58   146541 F         174
##  9  1547425     78    25189 F         185
## 10  4745564     78  1547425 M         185

Sada cemo vidjeti funkciju kako R prepoznaje jednake varijable i ne duplicira isto

left_join(T,V) #tezinu i visinu
## Joining with `by = join_by(ID)`
## # A tibble: 10 × 4
##          ID tezina Gender visina
##       <dbl>  <dbl> <fct>   <dbl>
##  1    25189     58 F         185
##  2    31298     66 F         128
##  3   281567     25 F         147
##  4   146541    183 F         174
##  5   151331    143 F         189
##  6 15413235     70 M         200
##  7  8664845     65 M         178
##  8    45626     58 M         158
##  9  1547425     78 M         185
## 10  4745564     78 M         158

Opet idimo na left_join () ali tezina i stanovanje

LJ <- left_join(T,S, by="ID") # sada mogu i različite dimenzije baze i spaja samo #preko istog ID
LJ 
## # A tibble: 10 × 3
##          ID tezina Stanovanje
##       <dbl>  <dbl> <fct>     
##  1    25189     58 Bihac     
##  2    31298     66 Zenica    
##  3   281567     25 Banja Luka
##  4   146541    183 Bijeljina 
##  5   151331    143 Mostar    
##  6 15413235     70 Krupa     
##  7  8664845     65 <NA>      
##  8    45626     58 Sarajevo  
##  9  1547425     78 Bužim     
## 10  4745564     78 Neum

Napomena!! Na se pojavljuje zato sto sa left_join zelimo da ZADRZIMO sve observacije lijeve baze

Napomena: R moze da spaja samo dvije baze, ne tri ili više odjednom

##dodavanje observacija

Sada dodajemo observacije, a varijable da nam ostanu iste.

BR <- bind_rows(S,T) #moze iako su razlicite dimenzije ali dobivamo Na
str(BR)
## tibble [28 × 3] (S3: tbl_df/tbl/data.frame)
##  $ ID        : num [1:28] 41554 25189 15831 31298 15461 ...
##  $ Stanovanje: Factor w/ 17 levels "Banja Luka","Bihac",..: 15 2 16 17 6 9 1 3 10 11 ...
##  $ tezina    : num [1:28] NA NA NA NA NA NA NA NA NA NA ...
head(BR, 12)
## # A tibble: 12 × 3
##          ID Stanovanje tezina
##       <dbl> <fct>       <dbl>
##  1    41554 Sarajevo       NA
##  2    25189 Bihac          NA
##  3    15831 Travnik        NA
##  4    31298 Zenica         NA
##  5    15461 Cazin          NA
##  6 15413235 Krupa          NA
##  7   281567 Banja Luka     NA
##  8   146541 Bijeljina      NA
##  9   151331 Mostar         NA
## 10  4745564 Neum           NA
## 11  1813224 Goražde        NA
## 12   158432 Pale           NA
tail(BR, 12)
## # A tibble: 12 × 3
##          ID Stanovanje tezina
##       <dbl> <fct>       <dbl>
##  1  1547425 Bužim          NA
##  2    45626 Sarajevo       NA
##  3    25189 <NA>           58
##  4    31298 <NA>           66
##  5   281567 <NA>           25
##  6   146541 <NA>          183
##  7   151331 <NA>          143
##  8 15413235 <NA>           70
##  9  8664845 <NA>           65
## 10    45626 <NA>           58
## 11  1547425 <NA>           78
## 12  4745564 <NA>           78

Vidite kako su naljepljene observacije: 1. prvo ne prepoznaje zajednički ID 2. formirana je nova varijabla 3. Dodate su NA na mjesta gdje nema Stanovanja odnosno težine

Da bismo ovo riješili, tj. neka bude Na ali tamo gdje je jednak ID neka ga prepozna

FJ <- full_join (S,T)
## Joining with `by = join_by(ID)`
dim(FJ)
## [1] 19  3
head(FJ)
## # A tibble: 6 × 3
##         ID Stanovanje tezina
##      <dbl> <fct>       <dbl>
## 1    41554 Sarajevo       NA
## 2    25189 Bihac          58
## 3    15831 Travnik        NA
## 4    31298 Zenica         66
## 5    15461 Cazin          NA
## 6 15413235 Krupa          70
tail(FJ)
## # A tibble: 6 × 3
##        ID Stanovanje tezina
##     <dbl> <fct>       <dbl>
## 1  158310 Prijedor       NA
## 2   48735 Čapljina       NA
## 3  185431 Bugojno        NA
## 4 1547425 Bužim          78
## 5   45626 Sarajevo       58
## 6 8664845 <NA>           65

Ako hoćemo da vidimo da li određene baze uopće imaju iste redove, prije nego što ih uparimo

setequal(T[1], V[1])
## [1] TRUE

TRUE jer smo gledali samo prvu varijablu

Ako želimo da dobijemo samo što je upareno

inner_join(T,S, by="ID")
## # A tibble: 9 × 3
##         ID tezina Stanovanje
##      <dbl>  <dbl> <fct>     
## 1    25189     58 Bihac     
## 2    31298     66 Zenica    
## 3   281567     25 Banja Luka
## 4   146541    183 Bijeljina 
## 5   151331    143 Mostar    
## 6 15413235     70 Krupa     
## 7    45626     58 Sarajevo  
## 8  1547425     78 Bužim     
## 9  4745564     78 Neum

A ako želimo da vidimo obratno, ono što nije upareno onda je kod

anti_join(S, T, by="ID")
## # A tibble: 9 × 2
##         ID Stanovanje
##      <dbl> <fct>     
## 1    41554 Sarajevo  
## 2    15831 Travnik   
## 3    15461 Cazin     
## 4  1813224 Goražde   
## 5   158432 Pale      
## 6 15884651 Rogatica  
## 7   158310 Prijedor  
## 8    48735 Čapljina  
## 9   185431 Bugojno

U svakom slučaju postoji mnogo varijanti za uparivanje baza. I predlazem dplyr paket za to

Ako se varijable drugacije zovu a zelimo da ih uparimo mozemo da koristimo i funkciju merge () u paketu basic ()

merge () moze imate iste ili razlicite nazive sto se rjesava sa argumentima by.x= i by.y.

Funkcije merganja iz dplyr paketa podrazumjevaju iste pakete.

#promijeni naziv za ID
S <- S %>% rename(idbroj = ID)

LJ1 <- merge(T,S,by.x ="ID" , by.y = "idbroj" )
LJ1
##         ID tezina Stanovanje
## 1    25189     58      Bihac
## 2    31298     66     Zenica
## 3    45626     58   Sarajevo
## 4   146541    183  Bijeljina
## 5   151331    143     Mostar
## 6   281567     25 Banja Luka
## 7  1547425     78      Bužim
## 8  4745564     78       Neum
## 9 15413235     70      Krupa