library(dplyr)
library(leaflet)
load('data/yelp1.rdata')
# create popups in html format
url = "'http://www.cm.nsysu.edu.tw'"
biz$popup = paste(
  sep="<br/>",
  sprintf("<b><a href=%s>%s</a></b>",url,biz$name),
  sprintf("Stars:%.1f, Reviews:%d",biz$star,biz$review),
  biz$address)
# patition the biz data_frame by the no. review 
biz$review %>% cut(c(0,5,10,50,100,200,400,900)) %>% table
.
    (0,5]    (5,10]   (10,50]  (50,100] (100,200] (200,400] (400,900] 
     5272      2406      2731       678       329        97        24 
biz$no.review = cut(biz$review, c(0,5,10,50,100,200,400,900))
bx = split(biz, biz$no.review)
# create the map object
l <- leaflet() %>% addTiles() 
# add a level of markers per partition
names(bx) %>% purrr::walk( function(df) {
  l <<- l %>% addMarkers(
    data=bx[[df]], lng=~longitude, lat=~latitude,
    label=~name,
    popup=~popup,
    group = df,
    clusterOptions=markerClusterOptions(removeOutsideVisibleBounds=F),
    labelOptions = labelOptions(noHide=F, direction='auto')) 
  })

An Multi-Layer Interactive Map

Besides zoom-and-pan, try …

# plot the map 
l %>% addLayersControl(
  overlayGroups = names(bx),
  options = layersControlOptions(collapsed = FALSE) )



LS0tDQp0aXRsZTogIuWkmuWxpOasoeS6kuWLleWcsOWcliIgDQpzdWJ0aXRsZTogIlllbHAgS2FnZ2xlIERhdGFzZXQgb24gdGhlIE1hcCINCmF1dGhvcjogIlRvbnkgQ2h1byINCmRhdGU6ICIyMDE35bm0N+aciDIz5pelIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlDQogICAgdGhlbWU6IGx1bWVuDQotLS0NCg0KYGBge3Igc2V0LW9wdGlvbnMsIGVjaG89RkFMU0UsIGNhY2hlPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCm9wdGlvbnMod2lkdGg9MTAwKQ0Kb3B0c19jaHVuayRzZXQoY29tbWVudCA9IE5BKQ0KYGBgDQoNCmBgYHtyIHdhcm5pbmc9RiwgbWVzc2FnZT1GLCBjYWNoZT1GfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobGVhZmxldCkNCmxvYWQoJ2RhdGEveWVscDEucmRhdGEnKQ0KYGBgDQoNCmBgYHtyfQ0KIyBjcmVhdGUgcG9wdXBzIGluIGh0bWwgZm9ybWF0DQp1cmwgPSAiJ2h0dHA6Ly93d3cuY20ubnN5c3UuZWR1LnR3JyINCmJpeiRwb3B1cCA9IHBhc3RlKA0KICBzZXA9Ijxici8+IiwNCiAgc3ByaW50ZigiPGI+PGEgaHJlZj0lcz4lczwvYT48L2I+Iix1cmwsYml6JG5hbWUpLA0KICBzcHJpbnRmKCJTdGFyczolLjFmLCBSZXZpZXdzOiVkIixiaXokc3RhcixiaXokcmV2aWV3KSwNCiAgYml6JGFkZHJlc3MpDQpgYGANCg0KYGBge3J9DQojIHBhdGl0aW9uIHRoZSBiaXogZGF0YV9mcmFtZSBieSB0aGUgbm8uIHJldmlldyANCmJpeiRyZXZpZXcgJT4lIGN1dChjKDAsNSwxMCw1MCwxMDAsMjAwLDQwMCw5MDApKSAlPiUgdGFibGUNCmJpeiRuby5yZXZpZXcgPSBjdXQoYml6JHJldmlldywgYygwLDUsMTAsNTAsMTAwLDIwMCw0MDAsOTAwKSkNCmJ4ID0gc3BsaXQoYml6LCBiaXokbm8ucmV2aWV3KQ0KYGBgDQoNCmBgYHtyfQ0KIyBjcmVhdGUgdGhlIG1hcCBvYmplY3QNCmwgPC0gbGVhZmxldCgpICU+JSBhZGRUaWxlcygpIA0KDQojIGFkZCBhIGxldmVsIG9mIG1hcmtlcnMgcGVyIHBhcnRpdGlvbg0KbmFtZXMoYngpICU+JSBwdXJycjo6d2FsayggZnVuY3Rpb24oZGYpIHsNCiAgbCA8PC0gbCAlPiUgYWRkTWFya2VycygNCiAgICBkYXRhPWJ4W1tkZl1dLCBsbmc9fmxvbmdpdHVkZSwgbGF0PX5sYXRpdHVkZSwNCiAgICBsYWJlbD1+bmFtZSwNCiAgICBwb3B1cD1+cG9wdXAsDQogICAgZ3JvdXAgPSBkZiwNCiAgICBjbHVzdGVyT3B0aW9ucz1tYXJrZXJDbHVzdGVyT3B0aW9ucyhyZW1vdmVPdXRzaWRlVmlzaWJsZUJvdW5kcz1GKSwNCiAgICBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMobm9IaWRlPUYsIGRpcmVjdGlvbj0nYXV0bycpKSANCiAgfSkNCmBgYA0KDQoNCiMjIyBBbiBNdWx0aS1MYXllciBJbnRlcmFjdGl2ZSBNYXANCg0KQmVzaWRlcyB6b29tLWFuZC1wYW4sIHRyeSAuLi4NCg0KKyBjbGlja2luZyB0aGUgY2hlY2sgYm94IGluIHRoZSB1cHBlciByaWdodCB0byBzZWxlY3RpbmcgYnVzaW5lc3NlcyAoYnkgdGhlIG51bWJlciBvZiByZXZpZXdzKQ0KKyBjbGlja2luZyB0aGUgY29sb3IgYnV0dG9ucyB0byB6b29taW4NCisgaG92ZXJpbmcgb24gdGhlIG1hcmtlcnMgdG8gc2VlIGJ1c2luZXNzIG5hbWVzDQorIGNsaWNraW5nIG9uIHRoZSBtYXJrZXJzIHRvIHNlZSB0aGUgYnVzaW5lc3MgaW5mby4NCiAgICArIFVSTCwgDQogICAgKyBOby4gU3RhcnMsIA0KICAgICsgTm8uIFJldmlldywNCiAgICArIEFkZHJlc3MNCg0KDQpgYGB7ciBmaWcud2lkdGg9OS41LCBmaWcuaGVpZ2h0PTYuNX0NCiMgcGxvdCB0aGUgbWFwIA0KbCAlPiUgYWRkTGF5ZXJzQ29udHJvbCgNCiAgb3ZlcmxheUdyb3VwcyA9IG5hbWVzKGJ4KSwNCiAgb3B0aW9ucyA9IGxheWVyc0NvbnRyb2xPcHRpb25zKGNvbGxhcHNlZCA9IEZBTFNFKSApDQpgYGANCg0KDQoNCjxicj4NCjxicj4NCg==