Open NoseF17 opened 4 years ago
To ni napaka - gre samo za opozorilo, da imaš pri združevanju v eni razpredelnici stolpec Drzava
kot vektor nizov, v drugi pa kot faktor. V večini primerov to ni problem - če pa bi bilo zaradi tega združevanje prepočasno, bi se morda izplačalo vektor nizov pretvoriti v faktor (npr. s funkcijo parse_factor
iz knjižnice readr
).
Mimogrede: če v issue pišeš kodo v več vrsticah, to naredi tako:
```R
koda v
več vrsticah
```
Znak R
pomeni, naj se pobarva kot R-jeva koda (po potrebi bi lahko tam napisal tudi ime katerega drugega programskega jezika).
Hvala, bom upošteval za v naprej. S pomočjo vaj sem prišel do tega:
razvrscanje <- function(){
evropa1 <- World %>% filter (continent == 'Europe')
names(evropa1)[3] <- 'Drzava'
delure <- A1 %>% filter(Leto == 2018, Spol == "Total") %>%
select(Drzava, SteviloDelovnihUr)
bdp <- A4 %>% filter(Leto == 2018) %>%
select(Drzava, BDP)
glavni1 <- inner_join(evropa1, delure, by = 'Drzava')
glavni2 <- inner_join(glavni1, bdp, by = 'Drzava')
podatki_cluster <- glavni2 %>% select('Drzava', 'SteviloDelovnihUr','BDP', 'pop_est','well_being')
podatki.norm <- podatki_cluster %>% select(-Drzava) %>% scale()
rownames(podatki.norm) <- podatki_cluster$Drzava
k <- kmeans(podatk.norm, 5, nstart=1000)
skupine <- data.frame(Drzava=podatki_cluster$Drzava, skupina=factor(k$cluster))
slika <- tm_shape(merge(podatki_cluster, skupine, by="Drzava")) + tm_polygons("skupina")
return(slika)
}
Funkcija vrne Error. Kje sem se zmotil?
Najprej poskrbi, da imaš na voljo zemljevid World
- nekam v vizualizacija.r
dodaj vrstico
data(World)
Naslednja napaka se pojavi zaradi tega, ker je razpredelnica glavni2
označena kot zemljevid, zaradi česar stolpec geometry
preživi funkcijo select
. Da se temu izogneš, bo potrebno razpredelnico pred tem označiti kot običajen data frame:
class(glavni2) <- "data.frame"
Potem bo potrebno pri merge
namesto podatki_cluster
uporabiti zemljevid evropa1
, poleg tega pa bo potrebno dodati parameter all.x=TRUE
(nisem prepričan, zakaj to ni privzeta izbira). Potrebno bo tudi poenotiti nekatera imena držav, da se prikažejo vsi podatki.
Tako bo zemljevid vseboval Evropo skupaj s celotno Rusijo in Francosko Gvajano. Da izrišeš samo Evropo, lahko funkciji tm_shape
dodaš še parametra xlim=c(-1600000, 3000000)
in ylim=c(4000000, 8000000)
(tukaj se uporabljajo enote zemljevida, ki niso neposredno izpeljane iz zemljepisnih koordinat).
Hvala @timotejvesel, vidim, da imaš boljšo rešitev glede mej zemljevida.
Sem izbrisal komentar, saj me je @jaanos za nekaj minut prehitel (sem prepozno opazil) in je bila njegova rešitev boljša (popolnoma delujoča). Zato bom samo še enkrat napisal za meje zemljevida:
library(tmaptools)
slika <- tm_shape(podatki %>% set_projection("latlong"),
xlim=c(-25, 35), ylim=c(32, 72)) + tm_polygons("skupina")
Hvala obema. Kaj tocno napravi all.x=TRUE
v merge-u?
Vključi vse vrstice iz tabele x ter samo tiste iz tabele y, ki se ujemajo ("imajo par" v x). Če vrstica iz x nima "ujemanja" v y, bo imela v stolpcih tabele y vrednosti NA
.
Analogno za all.y = TRUE
.
\
Še razlaga iz dokumentacije:
all.x - logical; if TRUE, then extra rows will be added to the output, one for each row in x that has no matching row in y. These rows will have NAs in those columns that are usually filled with values from y. The default is FALSE, so that only rows with data from both x and y are included in the output.
Torej enako kot left_join? Zakaj potem včasih uporabljamo join včasih pa merge?
Tako je. Problem je v tem, da left_join
(in druge funkcije iz dplyr
) ne delujejo na zemljevidih, uvoženih iz datotek SHP. Zemljevid World
je drugačnega tipa - mislim, da bi dejansko z njim lahko uporabil left_join
.
Če se spominjam pravilno, tudi na zemljevidu World
funkcija left_join
ni delovala pravilno. Problem je bil pri laravidmar/APPR-2019-20#2.
Začel sem pisati funkcijo:
razvrscanje <- function(){ evropa1 <- World %>% filter (continent == 'Europe') names(evropa1)[3] <- 'Drzava' delure <- A1 %>% filter(Leto == 2018, Spol == "Total") %>% select(Drzava, SteviloDelovnihUr) bdp <- A4 %>% filter(Leto == 2018) %>% select(Drzava, BDP) glavni1 <- inner_join(evropa1, delure, by = 'Drzava') glavni2 <- inner_join(glavni1, bdp, by = 'Drzava')
...
}
ki pa mi vrne problem(pri glavni1): Warning message: Column
Drzava
joining factor and character vector, coercing into character vector. Kako to popravim?