# aveți grijă să nu interpretați Namibia ca NA! pluck(4) |> rename(code = Code, name = `Numele țării (folosind majusculele titlului)`) # Folosind date de la {giscoR}, mai adaptate decât {rnaturalearth} pentru codurile alfa-2 # dar mai avem nevoie de câteva țări de curățare manuală clean_names() |> mutate(cntr_id = case_match(cntr_id = case_match(cntr_id = case_match(cntr_id = case_match), „EL” ~ „f. cntr_id)) # Vreau o proiecție Equal Earth centrată pe Pacific (EPSG:8859) # trebuie să corectăm geometria la antimeridian, deci trebuie să obținem # projection origin epsg filter(name == „Longitudine de origine naturală”) |> pull(value) # ar trebui să fie 150 # Pentru fundalul hărții ocean st_as_anti_meridian)(st_break) |>st_meridian) |> st_segmentize(units::set_units(100, km)) Rezolvarea problemei De fapt, aceasta este cea mai simplă parte, odată ce datele sunt curate! rezultate filter(str_detect(name, regex(code, ignore_case = TRUE))) Rezultate Din cele 249 de țări care au un cod ISO, 59 se potrivesc cu interogarea noastră (Tabelul 1). Pentru toate acestea codul apare în primele două caractere. Lipsește cel puțin unul! Codul Noua Caledonie este NC; acest cod nu este în numele său, dar acest teritoriu face parte din FraNCe. În conformitate cu regulile îngăduitoare, contează… # folosind steaguri emoji pentru afișare, avem nevoie de mai multe rezultate de dispută de date |> mutate(name_flag = name |> str_split_i(„,”, 1)|> str_replace_all( c(„Republica Democratică Populară Lao” = „Laos”, „Federația Rusă””, „” = „Republica Arabă Rusă”, „S = „Republica Arabă Rusia”, „S. \(U\.S\.\)” = „Insulele Virgine americane”))) |> mutate(flag = hartă(name_flag, eventual((x) flag(x), altfel = „”)), display = glue(„{flag} {name} ({code})”)) |> aranja(afișare) |> select(afișare) |> select(afișare =_()bel) |> g | cols_align(align = „stânga”) Țara 🇦🇫 Afganistan (AF) 🇦🇱 Albania (AL) 🇦🇷 Argentina (AR) 🇦🇺 Australia (AU) 🇦🇿 Azerbaidjan (AZ) 🇧🇱 Statul Bolivia (🇧BE) Belgia (🇧BE) națională Belgia (🇧BE) 🇧🇷 Brazilia (BR) 🇨🇦 Canada (CA) 🇨🇴 Columbia (CO) 🇨🇺 Cuba (CU) 🇨🇾 Cipru (CY) 🇨🇿 Cehia (CZ) 🇩🇴 Republica Dominicană (Djibouti) (DJ) Djibouti (D) 🇪🇨 Ecuador (EC) 🇪🇬 Egipt (EG) 🇪🇷 Eritreea (ER) 🇪🇹 Etiopia (ET) 🇫🇮 Finlanda (FI) 🇫🇷 Franța (FR) 🇬🇷 Gabon (GA)🇪 Georgia (GA)🇪 Gabon (GA)🇪 Ghana (GH) 🇬🇮 Gibraltar (GI) 🇬🇷 Grecia (GR) 🇬🇺 Guam (GU) 🇭🇺 Ungaria (HU) 🇮🇳 India (IN) 🇮🇷 Iran, Republica Islamică (IR)🇹 Italia (IR)🇹 Jersey (JE) 🇯🇴 Iordania (JO) 🇰🇪 Kenya (KE) 🇰🇮 Kiribati (KI) 🇱🇦 Republica Democrată Populară Lao (LA) 🇱🇮 Liechtenstein (LI) 🇱🇺 Luxemburg (LU) 🇺 Namibia (LU) 🇺 Luxemburg (LU) 🇳🇮 Nicaragua (NI) 🇳🇴 Norvegia (NO) 🇴🇲 Oman (OM) 🇵🇦 Panama (PA) 🇵🇪 Peru (PE) 🇵🇭 Filipine (PH) 🇶🇦 România (Qatar)🇶🇦 Qatar 🇷🇺 Federația Rusă (RU) 🇷🇼 Rwanda (RW) 🇸🇦 Arabia Saudită (SA) 🇸🇴 Somalia (SO) 🇸🇾 Republica Arabă Siriană (SY) 🇹🇭 Thailanda (TH) 🇸🇴 Uganda () (UG) 🇺🇿 Uzbekistan (UZ) 🇻🇪 Venezuela, Republica Bolivariană (VE) 🇻🇮 Insulele Virgine (SUA) (VI) 🇾🇪 Yemen (YE) Tabelul 1: Țările al căror cod ISO 3166-1 alfa-2 este conținut în numele lor sub forma Hartă, șirul lor acum sub formă 30DayMapChallenge, o hartă coropletă clasică. țări |> st_break_antimeridian(lon_0 = origine) |> left_join(rezultate, join_by(cntr_id == cod)) |> ggplot() + geom_sf(data = ocean, fill = „paleturquoise”, color = NA, alpha = .4) + geom_sf(aes) = !(aes) + name = ! scale_fill_manual(valori = c(„TRUE” = „darkolivegreen3”, „FALSE” = „snow2”), etichete = c(„TRUE” = „da”, „FALSE” = „nu”)) + scale_color_manual (valori = c(„TRUE” = „darkolivegreen4”, „FALSE” = „,”TRUE =w3” = „,”sbel =” „FALSE” = „nu”)) + coord_sf(crs = glue(„EPSG:{epsg}”)) + guides(fill = guide_legend(reverse = TRUE), color = guide_legend(reverse = TRUE)) + labs(title = glue(„Țări ale căror ISO 3166-1 alpha-2 are codul ISO 3166-1 alpha-2), completați sub numele lor alpha-2, codul alpha-2 ?”, culoare = „numele are ISO alpha-2?”, legenda = glue(„date : Gisco, Wikipedia https://r.iresmi.net/ {Sys.Date()}”)) + theme_minimal() + theme(plot.caption = element_text(size = 6), legend.position = „bottom”, plot.background =l al căror cod ISO 3166-1 alfa-2 este conținut ca subșir în numele lor ” />
(Acest articol a fost publicat pentru prima dată pe r.iresmi.netși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Ziua 3 din 30DayMapChallenge: « Poligoane » (anterior).
O provocare interesantă acum câteva săptămâni pe https://en.osm.town/@opencage/115271196316302891:
Numiți țările al căror cod ISO 3166-1 alfa-2 este conținut ca subșir în versiunea comună în limba engleză a numelui țării.
De exemplu: Eaaly are codul ISO „IT” în numele său; „SE” este codul ISO pentru Suedia, dar nu se găsește în numele său.
Hai sa cartografiam asta…
Înființat
library(dplyr) library(stringr) library(purrr) library(emoji) library(rvest) library(glue) library(gt) library(ggplot2) library(giscoR) library(janitor) library(sf) library(jsonlite)
Date
# ISO_3166-1_alpha-2 codes
iso_3166_a2 <- read_html("https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2") |>
html_table(na.strings = "") |> # take care not to interpret Namibia as NA!
pluck(4) |>
rename(code = Code,
name = `Country name (using title case)`)
# Using data from {giscoR}, more adapted than {rnaturalearth} for alpha-2 codes
# but we still need some manual cleaning
countries <- gisco_countries |>
clean_names() |>
mutate(cntr_id = case_match(cntr_id,
"EL" ~ "GR",
"GB" ~ "UK",
.default = cntr_id))
# I want an Equal Earth projection centered on the Pacific (EPSG:8859)
# we must correct the geometry at the anti meridian, so we must get the
# projection origin
epsg <- "8859"
origin <- fromJSON(glue("https://epsg.io/{epsg}.json")) |>
pluck("conversion", "parameters") |>
filter(name == "Longitude of natural origin") |>
pull(value) # should be 150
# For the map background
ocean <- st_bbox(countries) |>
st_as_sfc() |>
st_break_antimeridian(lon_0 = origin) |>
st_segmentize(units::set_units(100, km))
Rezolvarea problemei
De fapt, aceasta este cea mai ușoară parte, odată ce datele sunt curate!
results <- iso_3166_a2 |> filter(str_detect(name, regex(code, ignore_case = TRUE)))
Din cele 249 de țări care au un cod ISO, 59 se potrivesc cu interogarea noastră (Tabelul 1). Pentru toate acestea codul apare în primele două caractere.
Lipsește cel puțin unul! Codul Noua Caledonie este NC; acest cod nu este în numele său, dar acest teritoriu face parte din FraNCe. Conform regulilor blânde, contează…
# using emoji flags for display, we need some more data wrangling
results |>
mutate(name_flag = name |>
str_split_i(",", 1)|>
str_replace_all(
c("Lao People's Democratic Republic" = "Laos",
"Russian Federation" = "Russia",
"Syrian Arab Republic" = "Syria",
"Virgin Islands \(U\.S\.\)" = "U.S. Virgin Islands"))) |>
mutate(flag = map(name_flag, possibly((x) flag(x), otherwise = "")),
display = glue("{flag} {name} ({code})")) |>
arrange(display) |>
select(display) |>
gt() |>
cols_label(display = "Country") |>
cols_align(align = "left")
| 🇦🇫 Afganistan (AF) |
| 🇦🇱 Albania (AL) |
| 🇦🇷 Argentina (AR) |
| 🇦🇺 Australia (AU) |
| 🇦🇿 Azerbaidjan (AZ) |
| 🇧🇪 Belgia (BE) |
| 🇧🇴 Bolivia, Statul Plurinațional (BO) |
| 🇧🇷 Brazilia (BR) |
| 🇨🇦 Canada (CA) |
| 🇨🇴 Columbia (CO) |
| 🇨🇺 Cuba (CU) |
| 🇨🇾 Cipru (CY) |
| 🇨🇿 Cehia (CZ) |
| 🇩🇯 Djibouti (DJ) |
| 🇩🇴 Republica Dominicană (DO) |
| 🇪🇨 Ecuador (EC) |
| 🇪🇬 Egipt (EG) |
| 🇪🇷 Eritreea (ER) |
| 🇪🇹 Etiopia (ET) |
| 🇫🇮 Finlanda (FI) |
| 🇫🇷 Franța (FR) |
| 🇬🇦 Gabon (GA) |
| 🇬🇪 Georgia (GE) |
| 🇬🇭 Ghana (GH) |
| 🇬🇮 Gibraltar (GI) |
| 🇬🇷 Grecia (GR) |
| 🇬🇺 Guam (GU) |
| 🇭🇺 Ungaria (HU) |
| 🇮🇳 India (IN) |
| 🇮🇷 Iran, Republica Islamică (IR) |
| 🇮🇹 Italia (IT) |
| 🇯🇪 Jersey (JE) |
| 🇯🇴 Iordania (JO) |
| 🇰🇪 Kenya (KE) |
| 🇰🇮 Kiribati (KI) |
| 🇱🇦 Republica Democrată Populară Lao (LA) |
| 🇱🇮 Liechtenstein (LI) |
| 🇱🇺 Luxemburg (LU) |
| 🇳🇦 Namibia (NA) |
| 🇳🇮 Nicaragua (NI) |
| 🇳🇴 Norvegia (NU) |
| 🇴🇲 Oman (OM) |
| 🇵🇦 Panama (PA) |
| 🇵🇪 Peru (PE) |
| 🇵🇭 Filipine (PH) |
| 🇶🇦 Qatar (QA) |
| 🇷🇴 România (RO) |
| 🇷🇺 Federația Rusă (RU) |
| 🇷🇼 Rwanda (RW) |
| 🇸🇦 Arabia Saudită (SA) |
| 🇸🇴 Somalia (SO) |
| 🇸🇾 Republica Arabă Siriană (SY) |
| 🇹🇭 Thailanda (TH) |
| 🇹🇴 Tonga (TO) |
| 🇺🇬 Uganda (UG) |
| 🇺🇿 Uzbekistan (UZ) |
| 🇻🇪 Venezuela, Republica Bolivariană (VE) |
| 🇻🇮 Insulele Virgine (SUA) (VI) |
| 🇾🇪 Yemen (YE) |
Tabelul 1: Țările al căror cod ISO 3166-1 alfa-2 este conținut ca subșir în numele lor
Hartă
Acum, pentru a îndeplini 30DayMapChallenge, o hartă coropletă clasică.
countries |>
st_break_antimeridian(lon_0 = origin) |>
left_join(results,
join_by(cntr_id == code)) |>
ggplot() +
geom_sf(data = ocean, fill = "paleturquoise", color = NA, alpha = .4) +
geom_sf(aes(fill = !is.na(name), color = !is.na(name))) +
scale_fill_manual(values = c("TRUE" = "darkolivegreen3",
"FALSE" = "snow2"),
labels = c("TRUE" = "yes",
"FALSE" = "no")) +
scale_color_manual(values = c("TRUE" = "darkolivegreen4",
"FALSE" = "snow3"),
labels = c("TRUE" = "yes",
"FALSE" = "no")) +
coord_sf(crs = glue("EPSG:{epsg}")) +
guides(fill = guide_legend(reverse = TRUE),
color = guide_legend(reverse = TRUE)) +
labs(title = glue("Countries whose ISO 3166-1 alpha-2 code is contained as a \
substring in their name"),
fill = "name has ISO alpha-2 ?",
color = "name has ISO alpha-2 ?",
caption = glue("data : Gisco, Wikipedia
https://r.iresmi.net/ {Sys.Date()}")) +
theme_minimal() +
theme(plot.caption = element_text(size = 6),
legend.position = "bottom",
plot.background = element_rect(fill = "white", color = NA))

Figura 1: Țări al căror cod ISO 3166-1 alfa-2 este conținut ca subșir în numele lor
