Я попытался повторить пример. Я надеюсь, что вам достаточно следующего, чтобы поработать самостоятельно и повторить пример. Кажется, что countrycode_data
находится в пакете psData. Для этого пакета требуется пакет r Java, которого сейчас нет на моей машине. Пока вы искали обходной путь, я нашел свой путь; Я собираю данные по стране, включая iso3. (Возможно, вы также можете использовать пакет ISO-кодов.) Необходимо проверить, идентичны ли названия стран в двух наборах данных, что является распространенной проблемой. Вы обычно видите некоторые несоответствия. У меня нет времени, чтобы исправить все, но я показал вам, как изменить названия некоторых стран в recode()
. Суть в том, что вы хотите добавить iso3 к countries
. Поэтому вам необходимо убедиться, что у вас одинаковые названия стран. (Очевидно, что некоторые страны больше не существуют. Вы не можете ничего с ними поделать.) Автор использовал match()
в своем коде, но я скорее использовал left_join()
, чтобы сделать то же самое. После этого, я думаю, вы готовы следовать остальной части кода. Обратите внимание, что hc_add_series_map()
также выполняет процесс соединения. worldgeojson
имеет свойство под названием iso3
. countries
должен иметь столбец с именем iso3
. В противном случае вы снова получите то же сообщение об ошибке.
library(tidyverse)
library(data.table)
library(rvest)
library(highcharter)
library(viridisLite)
# I used fread(). This is much faster.
terror <- fread("globalterrorismdb_0919dist.csv")
# I wrote my own code which does the same job.
count(terror, country_txt) %>%
setNames(nm = c("country.name", "total")) -> countries
# Get iso3 data
map_dfc(.x = c("official", "shortname", "iso3"),
.f = function(x) {read_html("http://www.fao.org/countryprofiles/iso3list/en/") %>%
html_nodes(paste("td.", x, sep = "")) %>%
html_text() %>%
gsub(pattern = "\\n(\\s+)?", replacement = "")}) %>%
setNames(nm = c("official", "shortname", "iso3")) -> iso3
# Revise some country names.
mutate(iso3, shortname = trimws(sub(x = shortname, pattern = "\\(.*\\)",
replacement = "")),
shortname = recode(.x = shortname,
`Bosnia and Herzegovina` = "Bosnia-Herzegovina",
`Brunei Darussalam` = "Brunei",
Czechia = "Czech Republic",
Congo = "Republic of the Congo",
`Côte d'Ivoire` = "Ivory Coast",
`Russian Federation` = "Russia",
`United Kingdom of Great Britain and Northern Ireland` = "United Kingdom",
`United States of America`= "United States"
)) -> iso3
# Join the two data sets
left_join(countries, iso3, by = c("country.name" = "shortname")) -> countries
data(worldgeojson, package = "highcharter")
dshmstops <- data.frame(q = c(0, exp(1:5)/exp(5)),
c = substring(viridis(5 + 1, option = "D"), 0, 7)) %>% #from viridisLite, make a color
list_parse2()
highchart() %>% #from highchart package
hc_add_series_map(worldgeojson, df = countries,
value = "total", joinBy = "iso3") %>%
hc_colorAxis(stops = dshmstops) %>%
hc_legend(enabled = TRUE) %>%
hc_add_theme(hc_theme_db()) %>%
hc_mapNavigation(enabled = TRUE) %>%
hc_title(text = "Global Terrorism in 1970-2016", style = list(fontSize = "25px")) %>%
hc_add_theme(hc_theme_google()) %>%
hc_credits(enabled = TRUE,
text = "Sources: National Consortium for the Study of Terrorism and Responses to Terrorism (START)",
style = list(fontSize = "10px"))