Early in 2017, a redditor created a comprehensive list of museums in the Washington DC area. Crosstalk, a new HTML Widget in R seemed like a great tool to explore these visually.
After cleaning this spreadsheet up and adding the addresses in, I was able to create the crosstalk example below using only a few lines of R code. Be sure to install the devtools version of DT below, the CRAN package does not currently work with HTML widgets.
This map is also available as a flexdashboard website with code.
R Code
library('ggmap')
library('leaflet')
library('crosstalk')
library('DT')
library('bsplus')
##load in museum data locally once addresses are added
df <- read.csv('df.csv', colClasses = "character")
lonlat <- geocode(df$Address)
df1<-cbind(df, lonlat)
names(df1) <- gsub("\\.", "", names(df1))
##Add Hyperlinks
df1$URL <- paste0("<a href='",df1$URL,"' target='_blank'>",df1$Name,"</a>")
df1$Cost <- as.numeric(gsub("[\\$,]", "", df1$Cost))
sd <- SharedData$new(df1)
##Add Filter/Slider Bar
bscols(
filter_checkbox("Organization", "Organization", sd, ~Organization, inline = TRUE),
filter_slider("Cost", "Cost", sd, column=~Cost)
)
##Map and Table
bscols(
leaflet(sd, width="100%", height=300) %>%
addTiles() %>%
addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
addMarkers(popup=paste("<b>Name:</b> ", df1$URL, "<br>",
"<b>Address:</b>", df1$Address, "<br>",
"<b>Cost:</b>", df1$Cost, "<br>",
"<b>Summary:</b>", df1$SummaryWebsite)),
datatable(sd, width="100%", height=300, extensions="Scroller", style="bootstrap", class="compact",
options=list(initComplete = JS(
"function(settings, json) {",
"$(this.api().table().header()).css({'background-color': '#F8F8F8', 'color': '#000'});",
"}"), deferRender=TRUE, scrollY=300, scroller=TRUE, columnDefs = list(list(visible=FALSE, targets=c(1,3,4,5,9,10,11)))))%>%
formatCurrency('Cost')
)