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)
#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
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
‘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