library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.4.2, released 2019/06/28
##  Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
##  GDAL binary built with GEOS: FALSE 
##  Loaded PROJ.4 runtime: Rel. 5.2.0, September 15th, 2018, [PJ_VERSION: 520]
##  Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
##  Linking to sp version: 1.3-2
library(countrycode)
library(ggmap)
## Loading required package: ggplot2
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(readxl)
library(leaflet)
library(DT)
library(taucharts)
library(sp)

We need to read the data:

cities <- read_excel("OAP_database.xls", sheet = 4)
## New names:
## * `` -> ...2
## * `` -> ...3
## * `` -> ...4
## * `` -> ...5
## * `` -> ...6
## * ...
cities <- cities[-c(1:2),]
cities <- cities[,c(3,2,4)]

names(cities) <- c("City", "Country", "PMLevel")
str(cities)
## tibble [1,099 × 3] (S3: tbl_df/tbl/data.frame)
##  $ City   : chr [1:1099] "Alger" "Buenos Aires" "Adelaide" "Brisbane" ...
##  $ Country: chr [1:1099] "Algeria" "Argentina" "Australia" "Australia" ...
##  $ PMLevel: chr [1:1099] "42" "38" "13.5" "18.166666666666668" ...

###Worst 100 cities with high levels of PM2.5

cities$PMLevel <- round(as.numeric(cities$PMLevel),2)
cities$PMLevel <- as.numeric(cities$PMLevel)

###1. An interactive table of the top 100 cities in the world with the city with the highest PM 10 levels on top.

cities %>% arrange (-PMLevel) %>% top_n(100) %>% datatable(rownames = FALSE)
## Selecting by PMLevel

###2. An interactive bar chart that shows the countries and the number of top 100 cities that are present in each country. The country with the highest number of cities should appear first.

tmp <- cities %>% arrange (-PMLevel) %>% top_n(100) %>%
  group_by(Country) %>% summarise(number_of_cities = length(Country))
## Selecting by PMLevel

By PMLevel:

tmp <-  tmp %>% arrange(-number_of_cities)
tmp$Country <- forcats::fct_inorder(tmp$Country)
tauchart(tmp) %>% tau_bar("number_of_cities", "Country", horizontal = "TRUE") %>% tau_legend() %>% tau_tooltip()
## Neither color nor size aesthetics have been mapped. Legend plugin will be active but not displayed.
  1. Plot the top 100 cities in a static world map. (Size the points as a function of the amount of PM 10 present in each city.)
cities100 <- cities %>% arrange(-PMLevel) %>% top_n(100)
## Selecting by PMLevel
cities100$CityCountry <- paste(cities100$City, cities100$Country, sep=", ")

This is the summary of the data:

head(cities100)
## # A tibble: 6 x 4
##   City        Country                 PMLevel CityCountry                       
##   <chr>       <chr>                     <dbl> <chr>                             
## 1 Ahwaz       Iran (Islamic Republic…    372  Ahwaz, Iran (Islamic Republic of) 
## 2 Ulaanbaatar Mongolia                   279  Ulaanbaatar, Mongolia             
## 3 Sanandaj    Iran (Islamic Republic…    254  Sanandaj, Iran (Islamic Republic …
## 4 Ludhiana    India                      251  Ludhiana, India                   
## 5 Quetta      Pakistan                   251. Quetta, Pakistan                  
## 6 Kermanshah  Iran (Islamic Republic…    229  Kermanshah, Iran (Islamic Republi…

Now we go through the process of R contacting Google for geocode information:

locs <- geocode(cities100$CityCountry)
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Ahwaz,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Ahwaz, Iran (Isla..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Ulaanbaatar,+Mongolia&key=xxx
## Warning: Geocoding "Ulaanbaatar, Mong..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Sanandaj,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Sanandaj, Iran (I..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Ludhiana,+India&key=xxx
## Warning: Geocoding "Ludhiana, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Quetta,+Pakistan&key=xxx
## Warning: Geocoding "Quetta, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kermanshah,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Kermanshah, Iran ..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Peshawar,+Pakistan&key=xxx
## Warning: Geocoding "Peshawar, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Gaborone,+Botswana&key=xxx
## Warning: Geocoding "Gaborone, Botswana" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Yasouj,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Yasouj, Iran (Isl..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kanpur,+India&key=xxx
## Warning: Geocoding "Kanpur, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Lahore,+Pakistan&key=xxx
## Warning: Geocoding "Lahore, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Delhi,+India&key=xxx
## Warning: Geocoding "Delhi, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Karachi,+Pakistan&key=xxx
## Warning: Geocoding "Karachi, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Islamabad,+Pakistan&key=xxx
## Warning: Geocoding "Islamabad, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Lucknow,+India&key=xxx
## Warning: Geocoding "Lucknow, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Rawalpindi,+Pakistan&key=xxx
## Warning: Geocoding "Rawalpindi, Pakistan" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Uromiyeh,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Uromiyeh, Iran (I..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Qom,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Qom, Iran (Islami..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Indore,+India&key=xxx
## Warning: Geocoding "Indore, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=khoramabad,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "khoramabad, Iran ..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Agra,+India&key=xxx
## Warning: Geocoding "Agra, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Al+Ain,+United+Arab+Emirates&key=xxx
## Warning: Geocoding "Al Ain, United Ar..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Riyadh,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Riyadh, Saudi Arabia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Al-Hafouf,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Al-Hafouf, Saudi ..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Lanzhou,+China&key=xxx
## Warning: Geocoding "Lanzhou, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kolkata,+India&key=xxx
## Warning: Geocoding "Kolkata, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Van,+Turkey&key=xxx
## Warning: Geocoding "Van, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Dakar,+Senegal&key=xxx
## Warning: Geocoding "Dakar, Senegal" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Makkah,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Makkah, Saudi Arabia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Xining,+China&key=xxx
## Warning: Geocoding "Xining, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Urumqi,+China&key=xxx
## Warning: Geocoding "Urumqi, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Faridabad,+India&key=xxx
## Warning: Geocoding "Faridabad, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Greater+Cairo,+Egypt&key=xxx
## Warning: Geocoding "Greater Cairo, Egypt" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Mexicali,+Mexico&key=xxx
## Warning: Geocoding "Mexicali, Mexico" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Jabalpur,+India&key=xxx
## Warning: Geocoding "Jabalpur, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Dhaka,+Bangladesh&key=xxx
## Warning: Geocoding "Dhaka, Bangladesh" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Mumbai,+India&key=xxx
## Warning: Geocoding "Mumbai, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Dhanbad,+India&key=xxx
## Warning: Geocoding "Dhanbad, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Ilam,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Ilam, Iran (Islam..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Jeddah,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Jeddah, Saudi Arabia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Allahabad,+India&key=xxx
## Warning: Geocoding "Allahabad, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Bushehr,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Bushehr, Iran (Is..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kerman,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Kerman, Iran (Isl..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Jinan,+China&key=xxx
## Warning: Geocoding "Jinan, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kuwait+City,+Kuwait&key=xxx
## Warning: Geocoding "Kuwait City, Kuwait" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Lagos,+Nigeria&key=xxx
## Warning: Geocoding "Lagos, Nigeria" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Beijing,+China&key=xxx
## Warning: Geocoding "Beijing, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Dammam,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Dammam, Saudi Arabia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Patna,+India&key=xxx
## Warning: Geocoding "Patna, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Sarajevo,+Bosnia+and+Herzegovina&key=xxx
## Warning: Geocoding "Sarajevo, Bosnia ..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Abu+Dhabi,+United+Arab+Emirates&key=xxx
## Warning: Geocoding "Abu Dhabi, United..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Meerut,+India&key=xxx
## Warning: Geocoding "Meerut, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Xi'an,+China&key=xxx
## Warning: Geocoding "Xi'an, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Jaipur,+India&key=xxx
## Warning: Geocoding "Jaipur, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Qazvin,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Qazvin, Iran (Isl..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Medan,+Indonesia&key=xxx
## Warning: Geocoding "Medan, Indonesia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Chengdu,+China&key=xxx
## Warning: Geocoding "Chengdu, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Hefei,+China&key=xxx
## Warning: Geocoding "Hefei, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Shenyang,+China&key=xxx
## Warning: Geocoding "Shenyang, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Yanbu,+Saudi+Arabia&key=xxx
## Warning: Geocoding "Yanbu, Saudi Arabia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kathmandu+Valley,+Nepal&key=xxx
## Warning: Geocoding "Kathmandu Valley,..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Taiyuan,+China&key=xxx
## Warning: Geocoding "Taiyuan, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Varanasi,+India&key=xxx
## Warning: Geocoding "Varanasi, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Chongqing,+China&key=xxx
## Warning: Geocoding "Chongqing, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Wuhan,+China&key=xxx
## Warning: Geocoding "Wuhan, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Esfahan,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Esfahan, Iran (Is..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Shijiazhuang,+China&key=xxx
## Warning: Geocoding "Shijiazhuang, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Konya,+Turkey&key=xxx
## Warning: Geocoding "Konya, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Kars,+Turkey&key=xxx
## Warning: Geocoding "Kars, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Hamedan,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Hamedan, Iran (Is..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Arak,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Arak, Iran (Islam..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Harbin,+China&key=xxx
## Warning: Geocoding "Harbin, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Tianjin,+China&key=xxx
## Warning: Geocoding "Tianjin, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Nanjing,+China&key=xxx
## Warning: Geocoding "Nanjing, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Denizli,+Turkey&key=xxx
## Warning: Geocoding "Denizli, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Zhengzhou,+China&key=xxx
## Warning: Geocoding "Zhengzhou, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Pune,+India&key=xxx
## Warning: Geocoding "Pune, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Hatay,+Turkey&key=xxx
## Warning: Geocoding "Hatay, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Nagpur,+India&key=xxx
## Warning: Geocoding "Nagpur, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Accra,+Ghana&key=xxx
## Warning: Geocoding "Accra, Ghana" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Hangzhou,+China&key=xxx
## Warning: Geocoding "Hangzhou, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Tehran,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Tehran, Iran (Isl..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Yangon,+Myanmar&key=xxx
## Warning: Geocoding "Yangon, Myanmar" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Erzurum,+Turkey&key=xxx
## Warning: Geocoding "Erzurum, Turkey" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Bhopal,+India&key=xxx
## Warning: Geocoding "Bhopal, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Changsha,+China&key=xxx
## Warning: Geocoding "Changsha, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Vijayawada,+India&key=xxx
## Warning: Geocoding "Vijayawada, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Tecate,+Mexico&key=xxx
## Warning: Geocoding "Tecate, Mexico" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Yinchuan,+China&key=xxx
## Warning: Geocoding "Yinchuan, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Bangalore,+India&key=xxx
## Warning: Geocoding "Bangalore, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Rajkot,+India&key=xxx
## Warning: Geocoding "Rajkot, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Mandalay,+Myanmar&key=xxx
## Warning: Geocoding "Mandalay, Myanmar" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Hyderabad,+India&key=xxx
## Warning: Geocoding "Hyderabad, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Visakhapatnam,+India&key=xxx
## Warning: Geocoding "Visakhapatnam, India" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Mashhad,+Iran+(Islamic+Republic+of)&key=xxx
## Warning: Geocoding "Mashhad, Iran (Is..." failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Sfax,+Tunisia&key=xxx
## Warning: Geocoding "Sfax, Tunisia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Tunis,+Tunisia&key=xxx
## Warning: Geocoding "Tunis, Tunisia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Bizerte,+Tunisia&key=xxx
## Warning: Geocoding "Bizerte, Tunisia" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Changchun,+China&key=xxx
## Warning: Geocoding "Changchun, China" failed with error:
## This API project is not authorized to use this API.
## Source : https://maps.googleapis.com/maps/api/geocode/json?address=Balikesir,+Turkey&key=xxx
## Warning: Geocoding "Balikesir, Turkey" failed with error:
## This API project is not authorized to use this API.

Pulling lat. and lon. information:

cities100$lat<-locs$lat
cities100$lon<-locs$lon
worldmap <- borders("world", fill="light grey", colour = "white") # create a layer of borders
worldmap <- ggplot() +   worldmap

With layer cities on top:

worldmap <- worldmap + geom_point(data=cities100,aes(x=lon, y=lat,size=PMLevel),alpha=.4,color="red") 
worldmap + theme_void()
## Warning: Removed 100 rows containing missing values (geom_point).

###4. Plot the top 100 cities in an interactive world map that shows a popup when a city is clicked. The popup should show information on the name of the city, the country of the city, and the annual mean PM 10 level in each city.

cities100$popup<-paste("<table><tr><td>City:", cities100$City,"<br>Country:",cities100$Country, "<br>Annual Mean PM10 Level:", cities100$PMLevel,"</td></tr></table>")
leaflet(cities100) %>% addTiles() %>%
  setView(0, 0, zoom = 2) %>%
  addCircles(stroke=FALSE, fillOpacity = .5, color = "red", radius=~PMLevel*1000, popup=~popup)
## Assuming "lon" and "lat" are longitude and latitude, respectively
## Warning in validateCoords(lng, lat, funcName): Data contains 100 rows with
## either missing or invalid lat/lon values and will be ignored

###5. Using the data for different countries from sheet 5, create an interactive choropleth of the world which colors different countries based on the PM 10 levels. Yet again, the popup when a country is clicked should provide information on the name of the country and the PM10 levels.

countries <- read_excel("OAP_database.xls", sheet = 5)
## New names:
## * `` -> ...2
## * `` -> ...3
## * `` -> ...4
## * `` -> ...5
## * `` -> ...6
## * ...
countries <-  countries[-c(1:2),c(2:3)]
names(countries) <-  c("Country", "PMLevel")
str(countries)
## tibble [91 × 2] (S3: tbl_df/tbl/data.frame)
##  $ Country: chr [1:91] "Estonia" "Mauritius" "Australia" "New Zealand" ...
##  $ PMLevel: chr [1:91] "11.132999999999999" "11.65" "13.179790073011779" "15" ...
countries$PMLevel <- round(as.numeric(countries$PMLevel),2)
countries$iso3c=countrycode(countries$Country, "country.name", "iso3c")
countries$iso3c <- as.factor(countries$iso3c)
url <- "http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip"
folder <- getwd() #set a folder where to download and extract the data
file <- basename(url) 
 download.file(url, file)
 unzip(file, exdir = folder)
#And read it with rgdal library
world <- readOGR(dsn = folder, 
                 layer = "ne_50m_admin_0_countries",
                 encoding = "UTF-8",
                 verbose = FALSE)
world <- sp::merge(world, countries,
                   by.x = "ISO_A3",
                   by.y = "iso3c",
                   sort = FALSE, duplicateGeoms = TRUE)

We can change and create a color palette:

pal <- colorNumeric(
  palette = "Reds",
  domain = countries$PMLevel
)

We can also create a popup:

world_popup <- paste(world$ADMIN, ", PM10 Level:", world$PMLevel, sep = "")

Now we create the map:

leaflet(data = world) %>%
  addTiles() %>%
  setView(0, 0, zoom = 2) %>%
  addPolygons(fillColor = ~pal(world$PMLevel),
              fillOpacity = 1,
              color = "#000000",
              weight = 1,
              label = ~world_popup) %>% addLegend("bottomright", pal = pal, values = ~PMLevel, title = "Amount of PM10 level", opacity = 1)