Kategória: R

1 szavazat
3k megtekintés

R-ben szeretnék települési poligonokat tartalmazó térképet:
olyat, amilyen itt is van:

enter image description here
Forrás:KSH

Ha ggplot2-t használok, akkor elég, ha a települési poligonok koordinátái és valami településazonosító van hozzá (lat, long, id). Ha van shapefile, akkor persze egyszerű, de települési szintű teljes shapefile nincs az országról.

Az openstreetmap alapján elvileg le lehet kérni ilyen adatokat, de sajnos nem minden településre.

Van egy kis program, amivel elég sokadatot ki lehet nyerni:

# települések neve egy vektorba
stl <- osm_telep[,1]

# függvény a koordináták összegyűjtéséhez =====================

osm_poly <- function(settlement_q){

  # web lekérdezéshez állandó részek: 
  nmt1 <- "http://nominatim.openstreetmap.org/search?q="
  nmt2 <-"&format=xml&polygon=1&limit=1&countrycodes=hu"
  # kereső kifejezés:
  search_string <- paste0(nmt1, settlement_q, nmt2, collapse = "")  

  require(XML2R)
  # Település koordinátái és egyebek
  dt <- XML2R(search_string)
  # poligonok
  pp <- dt[[2]][6]
  # tisztogatás
  pp2 <- substr(x = pp, start = 2, stop = nchar(pp)-1)
  # poligon koordináták kinyerése
  pp3 <- unlist(regmatches(x = pp2, gregexpr("[[:digit:]]+.[[:digit:]]+", pp2)))
  # koordináták rendezése
  long <- as.numeric(pp3[seq(from = 1,to = length(pp3), by = 2)])
  lat <- as.numeric(pp3[seq(from = 2,to = length(pp3), by = 2)])

  # települési adat
  dt_k <- data.frame(long=long, lat=lat, NEV=settlement_q)

  if (i==1) {
    map <<- dt_k
  } else{
    map <<-rbind(map, dt_k)  
  }
  return(map)
}

# ============== fg. vége =============================

# végrehajtás
for (i in 1:length(stl)){
  osm_poly(settlement_q = stl[i])
}

Hogyan lehetne a hiányzó adatokat letölteni? Úgy tűnik, a poligonok ott vannak valami adatbázisban, hiszen láthatóak, csak mintha rossz helyen keresném. A cél az lenne, hogy az ország összes települési poligonjának koordinátái egy állományban legyenek, és egyszerű legyen olyasmit rajzolni, mint a fenti képen.
pl.: Balatoncsicsó

  • H.Gergely kérdezte 3 év ago
  • utolsó aktivitás 3 év ago
0 szavazat
3k megtekintés

Ha van egy factor változó, ami valójában numeric (csak mondjuk egy adatbeolvasási hiba miatt (pl.: NoN érték szerepel a beolvasott adatbázisban) factorként jelenik meg az adatbézisban és vissza szeretném konvertálni numeric változóvá, akkor az as.numeric parancs miért a levels értékeket adja vissza?

(fac &lt;- as.factor(rnorm(10, 2)))
## [1] -0.554380142390025 3.01286043579667   2.14062458421036   0.795901374774481  1.1525828780559    2.646332153364     2.17778700367428   1.98899049113525   3.01461688372712   2.2758493636756   
## Levels: -0.554380142390025 0.795901374774481 1.1525828780559 1.98899049113525 2.14062458421036 2.17778700367428 2.2758493636756 2.646332153364 3.01286043579667 3.01461688372712
as.numeric(fac)
## [1]  1  9  5  2  3  8  6  4 10  7

Mi a leghatékonyabb konverzió?

  • tothgergo kérdezte 3 év ago
  • utolsó aktivitás 3 év ago
0 szavazat
2k megtekintés

Van egy data.frame objektumom:

(dd <- data.frame(b = factor(c("Mag", "Köz", "Mag", "Ala"), 
       levels = c("Ala", "Köz", "Mag"), ordered = TRUE),
       x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
       z = c(1, 1, 1, 2)))
##     b x y z
## 1 Mag A 8 1
## 2 Köz D 3 1
## 3 Mag A 9 1
## 4 Ala C 9 2

Szeretném több oszlop szerint is sorbarendezni. Mi a leghatékonyabb módja ennek?

  • tothgergo kérdezte 3 év ago
  • utolsó aktivitás 3 év ago
0 szavazat
3k megtekintés

Nézzük meg a következő nagyon egyszerű kódot:

i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i egyenlő 0.15-tel") else cat("i nem egyenlő 0.15-tel")
## i nem egyenlő 0.15-tel
(i==0.15)
## [1] FALSE

Vajon miért nem egyenlőek?

  • tothgergo kérdezte 3 év ago
  • utolsó aktivitás 3 év ago
4 találat mutatása