Hogyan tegyük fel kérdéseinket ezen az oldalon használható válaszok reményében? Milyen módon tudok képeket, adatokat és egyebeket megosztani a válaszolókkal? Hogyan csatoljak R kódot? Mit írjak le a használt R környezetről? Mi az a “minimal reproducible example”? Miért nem kapok választ?
Eredeti kérdés: SO
- r-projekt kérdezte 8 év ago
- utolsó aktivitás 6 év ago
R-ben szeretnék települési poligonokat tartalmazó térképet:
olyat, amilyen itt is van:
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 7 év ago
- utolsó aktivitás 7 év ago
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) factor
ké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 <- 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 8 év ago
- utolsó aktivitás 8 év ago
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 8 év ago
- utolsó aktivitás 8 év ago
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 8 év ago
- utolsó aktivitás 7 év ago