BraMira / Mirjam-Spela

Projekt pri predmetu OPB 2015/2016
0 stars 4 forks source link

več tabel v eno #4

Closed spelapovrzenic closed 8 years ago

spelapovrzenic commented 8 years ago

Pozdravljeni! Imam vprašanje, in sicer kako dati 2 tabeli v eno. V povezavi: https://github.com/BraMira/Mirjam-Spela/blob/master/Podatki/Uvoz1.R

sem že uvozila in naredila tabeli gl.mesta in area.pop in sedaj bi rada ti dve tabeli zdruzila v eno, saj za obe pove v kateri državi je kaj. Manjši problem pa je, ker nekatere države niso čisto enake. Kako odpraviti to težavo? In kako ju potem združiti v eno tabelo?

Že vnaprej se zahvaljujem za kakršnokoli pomoč! Špela

jaanos commented 8 years ago

Združevanje (po stolpcu z istim imenom) se najlažje naredi z inner_join:

names(area.pop)[1] <- "Country" # po uvozu ostane odvečen presledek
drzave <- inner_join(area.pop, gl.mesta)

Ta ustreza navadnemu JOINu v SQL - na voljo so sicer tudi funkcije left_join, right_join in full_join.

Seveda bo treba poskrbeti še za države, katerih imena se ne ujemajo. Najlažje jih dobiš z anti_join (po tem, ko že popraviš ime stolpca):

anti_join(gl.mesta, area.pop)
anti_join(area.pop, gl.mesta)

Tako lahko pred združevanjem popraviš imena držav v eni od tabel, da se bodo popolnoma ujemala.

Mimogrede, v funkciji ustvari_area je specificirano, naj se prva vrstica izpusti, zaradi česar pri površini manjka Afganistan. Poleg tega imata površino za Zahodno Saharo, glavnega mesta pa ne - odločita se, ali jo bosta izpustili, oziroma bosta na roke dodali glavno mesto (ali pa pustili, da ta vrednost manjka).

spelapovrzenic commented 8 years ago

aha najlepša hvala sedaj je to urejeno. sedaj imam pa še eno vprašanje spet v https://github.com/BraMira/Mirjam-Spela/blob/master/Podatki/Uvoz1.R

namreč pri religijah, ko uvozim tabelo pride zelo grda saj državam nazačetku doda znak  in tudi povsod pri odstotkih. Kako je najlepši način da se tega znabim? hvala in lp

spelapovrzenic commented 8 years ago

ter še en problem, link ki ga imam pri glavnih mestih, ne obstaja več oziroma je neka napaka.. ali je ok da (hvala bogu) sem že prej uvozila v csv in sedaj delam naprej s tem csvjem?

jaanos commented 8 years ago

Neželenih znakov se najlažje znebiš tako, da pobereš samo želen podniz:

Encoding(religije$Country) <- "UTF-8"
religije$Country <- religije$Country %>% strapplyc("([a-zA-Z -]+)") %>%
  sapply(. %>% .[[1]]) %>% trimws()
religije[,6] <- religije[,6] %>% strapplyc("([0-9.]+)") %>%
  unlist() %>% as.numeric()

Pri državah zgornja koda pobere samo ime države, brez oklepajev.

Kar se tiče glavnih mest, lahko delaš naprej s CSV datoteko. Vseeno pusti povezavo do spletne strani zakomentirano, da bo jasno, od kod so prišli podatki. Izgleda sicer, da ima stran težave z bazo, tako da bodo to najbrž kmalu popravili.

spelapovrzenic commented 8 years ago

najlepša hvala. Problem imam le, namreč pri Philippines mi nagaja, nemorem popraviti tako kot zgoraj, saj mi pri številih izpiše 11.00Â %[2][3] in nemore spremeniti

religije[,8] <- religije[,8] %>% strapplyc("([0-9.]+)") %>%
  unlist() %>% as.numeric()

torej tisto [2][3] ga moti.

Hvala in lp

spelapovrzenic commented 8 years ago

Torej nadaljujem zgornji issue, popravila sem encoding kar tako:

Encoding(religije$`Muslim%`) <- "UTF-8"

sedaj so stevilke boljše a vendar mi izpisuje še odstotke ter pri dveh podatkih dobim tak podatek (na wikipediji je bil tam vir)

11.00 %[2][3]

Kakšna pa je funkcija pa pusti samo številke, in izbriše vse od vključno predsledka naprej? Hvala in lp

jaanos commented 8 years ago

Da se znebiš morebitnih drugih številk, lahko uporabiš podoben trik kot pri državah, torej da pobereš samo prvi ujemajoči podniz v posamezni celici:

religije[,8] <- religije[,8] %>% strapplyc("([0-9.]+)") %>%
  sapply(. %>% .[[1]]) %>% as.numeric()
spelapovrzenic commented 8 years ago

Najlepša hvala! Ter zanima me še samo to, sedaj so v tabeli nekateri stolpci kot številke (num), nekateri pa so chr. Kako doseči, da bo R vedel da so vsi stolpci od vključno 4. naprej da vsebujejo številke, torej da so num ?

str(religije) 'data.frame': 264 obs. of 20 variables: $ Country : chr "Burundi" "Comoros" "Djibouti" "Eritrea" ... $ Region : chr "Sub-Saharan Africa" "Sub-Saharan Africa" "Sub-Saharan Africa" $ Subregion : chr "Eastern Africa" "Eastern Africa" "Eastern Africa" "Eastern Africa" ... $ Population : chr "8 380 000" "730 000" "890 000" "5 250 000" ... $ Christian : chr "7 667 700" "3 650" "20 470" "3 302 250" ... $ Christian% : num 91.5 0.5 2.3 62.9 62.8 84.8 85.3 82.7 25.3 0.7 ... $ Muslim : chr "234 640" "717 590" "862 410" "1 921 500" ... $ Muslim% : num 2.8 98.3 96.9 36.6 34.6 9.7 3 13 16.7 98.6 ...

torej tistim ki sem zdaj popravljala odstotke so ok so num, ostale pa so chr. hvala in lp

jaanos commented 8 years ago

Glede na to, da imaš presledke pri številkah, se bo teh treba znebiti pred pretvorbo v števila, npr.

religije$Population <- religije$Population %>% strsplit(split = " ") %>%
  sapply(. %>% paste(collapse = "")) %>% as.numeric()